SQLite:.Net比本地慢得多吗?

3
这是我的查询语句:
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下运行此查询可以在78ms内返回结果,但在.Net sqlite环境中需要近1400ms。

有什么建议吗?

我在我的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;
}

你是在使用一个托管包装器覆盖本地的sqlite3.dll还是完全托管的实现? - user703016
大家好。我正在使用ADO.Net DLL而不是本地的DLL。同时也会发布代码... - Jan de Jager
你仍然没有向我们展示完整的情况。我们还需要看到CallSqlReader()SqlStatement参数所传递的查询语句。不用担心,我们不会窃取你的工业机密。同时,我们想要看到你的表格的确切定义(CREATE TABLE),或许还想了解该表格包含多少行数据。 - Mike Nakis
很抱歉,我不太明白为什么要贴那么多的脚手架代码(但是我还是愿意分享)。查询如上所述,并且最终运行该查询的代码也已经发布了。因为我与客户签订了保密协议,所以无法贴太多内容... :-) - Jan de Jager
1个回答

0
预计使用非本地方式访问数据库会比使用本地方式访问同一数据库慢,甚至可能慢得多。但是先等待看看是否有人遇到过这个问题,并且能够提出解决方案。同时,如果您能够准确地展示如何在 dotnet 中执行此查询,那么这可能会有所帮助。

感谢您的回复。我假设ADO.Net接口以及我的ORM代码都会占用一定的资源。代码的性能分析清楚地表明,与本机运行的78毫秒相比,查询本身运行了1.5秒...您认为我在这里做错了什么吗? - Jan de Jager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接