2

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

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

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

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

这些方法中的每一个最终都会调用数据库中的查询。当我点击调试按钮时,这段代码第一次运行大约需要 1200 毫秒。然后,当我按下重新启动按钮时,大约 10 次后,结果平均约为 220 毫秒。

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

感谢您对如何阅读这些数字的建议。

4

1 回答 1

1

这可能是由于缓存造成的,具体取决于您查询数据库的方式(orm 可能会缓存,DB 会缓存,..)。您必须考虑以下几点:

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