c# - 设计库性能比较测试

标签 c# performance testing

我正准备对各种现成产品进行一系列性能比较。

我需要做什么才能在测试中表现出可信度?我如何设计基准测试才能使它们受到尊重?

我也对有关测试实际设计的任何建议感兴趣。在不影响测试的情况下加载数据的方法(海森堡不确定性原理),或监控...等的方法

最佳答案

如果不知道您要评估的是哪种“现成”产品,则很难回答这个问题。您是否正在寻找 UI 响应能力、吞吐量(例如电子邮件、交易/秒)、启动时间等 - 所有这些都有不同的标准来确定您应该跟踪的措施以及用于测试或评估的不同工具。但要回答您的一些一般性问题:

  1. 信誉 - 这很重要。尽量确保您正在测量的任何运行方差都很小。利用多次运行相同场景的技术,去除异常值(即最低和最高),并评估您的平均/最大/最小/中值。如果您正在进行某种吞吐量测试,请考虑使其长时间运行,以便您拥有良好的样本集。例如,如果您正在查看 Microsoft Exchange 之类的东西并因此使用它们的性能计数器,请尝试确保您经常进行采样(每秒一次或每隔几秒一次)并让测试运行 20 分钟左右。同样,切断前几分钟和最后几分钟以消除任何启动/关闭噪音。

  2. 海森堡 - 棘手。在大多数现代系统中,根据您正在测量的应用程序/措施,您可以通过明智地了解您正在测量的内容/方式来最大限度地减少这种影响。有时(如在 Exchange 示例中),您会看到接近 0 的影响。尽量使用侵入性最小的工具。例如,如果您要测量启动时间,请考虑使用 xperfinfo并利用内核中内置的事件。如果您正在使用 perfmon,请不要用您不关心的无关计数器淹没系统。如果您正在进行一些运行时间非常长的测试,请逐渐降低采样间隔。

还要尝试消除任何环境变化源或可能的噪声源。如果您正在做一些网络密集型的事情,请考虑隔离网络。尝试禁用您不关心的任何服务或应用程序。限制任何类型的磁盘 IO、内存密集型操作等。如果磁盘 IO 可能会在受 CPU 限制的东西中引入噪音,请考虑使用 SSD。

在设计测试时,请牢记可重复性。如果您进行某种微基准类型测试(例如 perf 单元测试),那么让您的基础设施支持运行相同的操作 n 次完全相同。如果您正在驱动 UI,请尽量不要以物理方式驱动鼠标,而是使用底层辅助功能层(MSAA、UIAutomation 等)以编程方式直接点击控件。

同样,这只是一般性建议。如果您有更多具体信息,那么我可以尝试跟进更相关的指导。

尽情享受吧!

关于c# - 设计库性能比较测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669107/

相关文章:

c# - GridView WPF MVVM中TextBox的TextChanged事件

performance - EC2 上的 Solr 地理空间查询性能

html - 为网站加载网络字体的最快方法?

java - 对 DAO 进行单元测试

spring - 我们应该使用 TDD 自动测试 spring 上下文吗?

c# - SQL按照PK FK关系递归地从多个表中复制行

c# - 将字符串转换为十进制? (可为空的十进制)通过扩展方法

C# System.Windows.Forms.Timer EventHandler 未被调用

mysql - 组合快速 MySQL 查询性能缓慢

测试需要管理权限的程序的安装过程