繁体   English   中英

PostSharp 对速度没有影响

[英]PostSharp has no effect on speed

我偶然发现了 PostSharp 令人难以置信的良好性能行为。 为了评估速度,我写了一个小程序,它会执行一个函数指定的次数,如果启用 PostSharp,它将生成和删除几百个字符串,就在内存中(非固定组合,所以它们不是自动-实习)。 循环在一段非平凡(几毫秒)的时间内执行。

现在,我无法测量几百万次运行的差异,并且大约 400 亿次的疯狂运行与执行相同数量调用的非 PostSharp 版本相比仅相差几纳秒。 对我来说,这是不可能的。 我的测试肯定有问题。 我让我的同事对代码进行了同行评审,所以我相当有信心代码可以实现我的意图。

那么,使用字符串生成(这是预期应用程序中的预期用途)作为基准测试的缓慢运行模拟有什么问题吗?

或者,是否有其他人执行(或知道)PostSharp 的运行时性能分析?

谢谢你。

在 3 GHz 处理器上,仅 400 亿个时钟周期就需要 13 秒——我真诚地怀疑一次迭代是否只需要一个时钟周期。 你的测试肯定有问题。

有些东西可能会被优化掉——也许它看到你一遍又一遍地做同样的事情,并决定根本不做(除了第一次)。 在进行性能分析时,您需要确保随机化数据。

我已经做了性能测试。 他们发表在PostSharp 博客上

如果某些方面不使用诸如反射、访问方法参数、访问方法实例等特性,则它们可以具有与手写代码相同的性能。 由于 PostSharp 发出 MSIL 指令,生成的代码可以由 JIT 编译器内联。

正如其他答案中所提醒的那样,请确保 (1) PostSharp 确实被调用(在生成的程序集上使用 Reflector)和 (2) 您正确使用了秒表。 如果您正在比较单个测试的平均时间,那么 PostSharp 和手写代码之间的差异只是几纳秒是正常的(假设您不使用昂贵的功能)。

您可以更改您的测试,以便在下一次迭代中使用生成的字符串(写入控制台的字符串长度)或类似的东西吗? 也许编译器以这样一种方式优化您的程序,即根本不执行 postsharp 函数,或者异步调用它或在另一个 cpu 上执行,因为没有理由与其他迭代同步。 如果您将其链接得更紧密,这可能会迫使编译器同步操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM