SQLite: .Net намного медленнее, чем родной? - PullRequest
3 голосов
/ 08 января 2012

Вот мой запрос:

SELECT * FROM [GeoName]
WHERE ((-26.3665122100029-Lat)*(-26.3665122100029-Lat))+((27.5978928658078-Long)*(27.5978928658078-Long)) < 0.005
ORDER BY ((-26.3665122100029-Lat)*(-26.3665122100029-Lat))+((27.5978928658078-Long)*(27.5978928658078-Long))
LIMIT 20

Возвращает 20 ближайших точек.

Выполнение этого в нативном sqlite возвращает результат в течение 78 мс, но из среды .Net sqlite это занимает почти 1400 мс.

Есть предложения?

У меня есть этот запрос в моей структуре ORM и с использованием параметризованных значений. Также пробовал это как собственный текстовый запрос.

Код, который выполняет запрос (внутри моих слоев ORM):

private static IDataReader CallSqlReader(string SqlStatement, Dictionary<string, object> parameters)
{
    ConnectionCheck();

    try
    {
        var cmd = conn.CreateCommand();
        cmd.CommandText = SqlStatement;
        cmd.CommandType = CommandType.Text;
        foreach (var item in parameters)
        {
            cmd.Parameters.AddWithValue(item.Key, item.Value);
        }
        return cmd.ExecuteReader();
    }
    catch { }
    return null;
}

1 Ответ

0 голосов
/ 08 января 2012

Ожидается, что неродные средства доступа к базе данных будут медленнее, возможно, намного медленнее, чем нативные средства доступа к той же базе данных. Но подождите, чтобы увидеть, покажется ли кто-то, у кого уже была эта проблема, и сумел найти какое-то решение. В то же время, вероятно, будет полезно, если вы покажете, как именно вы выполняете этот запрос из dotnet.

...