如何每秒分析C#方法?

Joa*_*nge 7 .net c# performance

我不知道标题是否有意义,但我想要做的是计算2种不同的方法,看看它们每秒执行多少次,或者每10秒说一次.

例如:

DividePolygons1(Polygon[] polys)
DividePolygons2(Polygon[] polys)

DividePolygons1 ran:
1642 times per 1 second

DividePolygons2 ran:
1890 times per 1 second
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 10

System.Diagnostics.Stopwatch课程将帮助你在这里,但要小心使用,结果不知何故,以便优化并不能消除你试图衡量的逻辑.

除此之外,只需运行您在循环中分析数百万次的代码(调整迭代次数使其花费1到30秒),然后将迭代次数除以获得执行吞吐量所需的时间.第二.

  • 并且使用发布版本并且在启动程序时没有附加调试器.并且在开始基准测试之前更好地运行所有代码,因此不会测量像JITing这样的启动效果. (5认同)
  • @Joan:在使用大型数组时要特别注意的一点是访问具有"良好局部性"的内存是一个很大的优势.例如,尝试使用循环嵌套的每个元素创建一个大型的二维数组和配置文件:for(rows){for(columns){...}} vs for(columns){for(rows){.. - 通常会有很大的不同,因为一个导致很多缓存未命中,另一个主要使用"靠近"的内存,因此可能已经在缓存中. (5认同)
  • @Joan:这不是你可以轻易避免的事情,如果没有专门设计用于查询CPU缓存未命中统计信息的分析器,很难测量.相反,它只是在分析时要注意的事情.我最近有一种情况,分配*less*内存使我的应用程序*更慢*因为它恰好发生了分配策略的更改导致不同的缓存未命中模式.这可能很混乱! (3认同)
  • @Joan:康拉德所说的是现代处理器在芯片本身*上制作*内存块*的副本*,乐观地认为在处理当前内存时内存内容不会在另一个线程上发生变化线.芯片上的副本称为"缓存".对缓存中的内容进行内存读取可能比读取"错过"缓存的内存快几百倍.多边形数组大小的详细信息以及分配的位置可能会产生意外的巨大性能差异. (2认同)