代码之家  ›  专栏  ›  技术社区  ›  uvita

需要有关比较2个等效LINQ查询与SQL查询的性能的建议

  •  1
  • uvita  · 技术社区  · 16 年前

    我正在开发工具来优化LINQ到SQL查询。基本上,它会截获LINQ执行管道,并进行一些优化,例如从查询中删除多余的连接。当然,在DBMS中执行查询之前,执行时间会有一个开销,但是之后,应该更快地处理查询。我不想使用SQL事件探查器,因为我知道生成的查询在DBMS中的性能会比原始查询好,所以我正在寻找一种正确的方法来测量在LINQ中创建查询到执行结束之间的全局时间。目前,我正在使用秒表类,我的代码如下所示:

    var sw = new Stopwatch();
    sw.Start();
    const int amount = 100;
    for (var i = 0; i < amount; i++)
    {
       ExecuteNonOptimizedQuery();
    }
    sw.Stop();
    Console.Writeline("Executing the query {2} times took: {0}ms. On average, each query took: {1}ms", sw.ElapsedMilliseconds, sw.ElapsedMilliseconds / amount, amount);
    

    基本上,executennooptimizedquery()方法创建一个新的DataContext,创建一个查询,然后迭代结果。

    我对查询的两个版本都这样做了,正常版本和优化版本。我是从 this 发自弗朗斯布玛的邮件。

    我是否应该采取其他方法/考虑?

    事先谢谢!

    1 回复  |  直到 16 年前
        1
  •  1
  •   Richard    16 年前

    你可以在分析器下运行。但是,检测的构建会影响代码的性能,可能会扭曲结果(在SQL Server中,这很可能是总执行时间的很大一部分)。采样分析器可能会有所帮助。(Visual Studio团队系统探查器可以同时执行这两项操作。)

    对于一个单独的测试,用 Stopwatch 通常是首选方法。您可以从秒表时间中删除SQL事件探查器中显示的时间,以获取客户机代码中的时间(包括后期处理)。