0

我知道这里已经问过一个类似的问题C#/.NET 分析器应该有哪些功能?但是这个线程不仅是关于愿望清单的,而且是关于如何去实现那个愿望清单的。

所以让我再问你一次。我正在构建通用性能分析器。我知道我可以将 dll 作为输入,并采用通常的秒表方法来分析该 dll 中方法的响应时间。但这是非常基本的东西。我愿意使用第三方 api(或者我自己也做一些代码)来提取我可以从那个 dll 中获得的任何有用信息。我想知道让它变慢的一切。我想知道它的内存泄漏。任何可以帮助我找到应用程序瓶颈的东西。我想要类似的方法来查找昂贵的数据库操作。但所有这一切,在一个应用程序下。

那么你建议什么方法?我可以将哪些工具放在我的保护伞下,以便我可以在我的项目中使用它们?

我想制作一个“单一”应用程序,它将采用 dll 等通用输入,也可以将输入作为源代码树(解决方案、项目、.cs 文件)并以响应时间、识别瓶颈、内存泄漏的形式发出结果, ETC。

4

1 回答 1

1

任何可以帮助我找到应用程序瓶颈的东西。

请注意通用分析假设,即测量会准确无误地导致瓶颈所在的位置,因为可以通过这种方式找到其中一些,但只能找到一些。

然后剩下的瓶颈就在那里浪费了不必要的时间,但开发人员没有注意到它们,因为分析器测量没有隔离它们。

一个简单的例子可能是某种看起来是最优的字典查找,除了被查找的单词是高度非随机的。如果某些词的查找频率更高,则表示优化的机会,但要检测到您需要了解有关数据的一些信息。测量分析器不查看程序的数据。

一个更极端的例子是任何类型的解释器,其数据是另一种语言的“指令集”。瓶颈很容易出现在其他语言中,但由于它是数据,测量分析器不会看到它们。

真正看到这类问题的不是测量,而是程序状态的少量样本,开发人员可以在其中全面检查和表征每个样本的内容(调用堆栈和数据)。与对方法进行测量或浏览调用图相比,这可以更好地理解程序如何以及为什么花费时间。

于 2012-05-16T20:40:18.970 回答