【问题标题】:Test performance测试性能
【发布时间】:2013-05-12 13:35:38
【问题描述】:

我创建了一个控制台应用程序,我在其中尝试了 2 种从 sql 数据库(= 在同一台服务器上)获取值的不同方法。当我添加一个秒表来检查哪个是最快的方法时,我有时会得到第一个,有时会得到第二个。什么可以为此负责?是否可以在相同条件下运行测试?我应该运行这个异步吗?

我的控制台代码可以在这里找到:http://pastie.org/7920175

【问题讨论】:

  • 首先,如果不在发布版本下,结果将毫无意义。其次,如果有时是第一个,有时是第二个,我会很快猜测它们花费的时间非常相似。
  • 我们需要方法本身的源代码。但是为什么需要优化代码呢?有这么慢吗?那么线程会更好。 @Moo-Juice:我完全同意。
  • 与数据库服务器本身执行 SQL 相关的因素(缓存、参数嗅探等)可能与客户端相比有同样多或更多的因素影响性能;当然,这取决于基准方法实际上做了什么——你没有说明和时间差——你也没有说明
  • 您实际上不太可能衡量代码的性能。当您查询 dbase 时,.NET 端并没有发生太多事情,这一切都发生在 dbase 服务器上。这基本上就是你的测试结果告诉你的。您需要得出的结论是,您使用哪种方法并不重要。

标签: c# performance methods console-application


【解决方案1】:

我推荐使用ANTS Performance Profile

方法的性能取决于许多因素,而不仅仅是服务器。

【讨论】:

    【解决方案2】:

    StopWatch 可能不像你喜欢的那样准确。

    您可以使用非常方便的 Visual Studio 2012 Performance Analysis(如果您使用的是 vs2012),否则您可能需要安装 Profiler Tool,例如 YourKit

    您说这两种方法从 SQL 数据库中检索数据。这意味着您不仅要测量您编写的代码,还要测量可能表现不同的第 3 方操作(例如从数据库中读取)。这可能是两种方法从一次运行到另一次返回不同时间的原因之一

    【讨论】:

      【解决方案3】:

      我认为您可以使用this nice 工具来检查您的方法性能。

      SpeedTester myTest = new SpeedTester([method to test]);
      myTest.RunTest();
      

      【讨论】:

        【解决方案4】:

        您测试的方法多久调用一次?每次运行它们一千次,看看哪一个从长远来看更快。

        此外,如果您所有的方法都在包装一些 SQL,那么在对相同数据进行第一次查询之后,您可能不会看到太大的差异。您可以在每次尝试之前考虑clearing the query cache

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-02
          • 2018-12-22
          • 2012-02-02
          • 2017-04-17
          • 2015-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多