测量查询的代码性能,如何看待结果?

时间:2012-07-22 20:36:40

标签: c#

我有一些看起来像这样的代码:

    public void SomeMethodThatLoadsUserData()
    {
       Stopwatch sw = new Stopwatch();
       sw.Start();

       Parallel.Invoke(Method1, Method2, .... , Method12);

       sw.Stop();
       var t = sw.ElapsedMilliseconds;
}

这些方法中的每一种都最终在数据库中调用查询。当我点击Debug按钮时,第一次运行此代码大约需要1200ms。然后,当我按下重启按钮后,大约10次,结果平均大约220ms。

这是一个巨大的差距,因为A 这是第一次应用程序必须进行某种编译,并且生产环境中的实际结果将接近平均220毫秒我是上我的笔记本电脑或B )数据缓存在SQL服务器中,当我点击重启时,数据从缓存中读取,因此该方法在生产环境中的实际性能实际上更接近于我在第一次运行中看到的1200毫秒。

感谢您就如何阅读这些数据提出建议。

1 个答案:

答案 0 :(得分:1)

这可能是由于缓存,取决于您查询数据库的方式(orm可能缓存,DB进行缓存,...)。您需要考虑以下几点:

  • 只运行一次这个方法没有说什么,运行几百次并采取平均值。因此,您可以消除启动时间,冷缓存以及.NET运行时必须在运行时加载的任何内容。
  • 模拟数据库以查看数据库端是否发生任何缓存或延迟是否有影响
  • 对于许多数据库,有一些工具可以帮助优化SQL查询,尤其是对于您正在使用的数据库。如果要对查询进行基准测试,请使用这些。
  • 使用发布版本运行基准测试,因为它们可能更加优化