使用哪些工具作为 API 来为 .NET 应用程序构建通用性能探查器

本文关键字:构建 应用程序 探查 NET 性能 API 工具 来为 | 更新日期: 2023-09-27 18:34:11

我知道这里已经问过类似的问题 C#/.NET 探查器应具有哪些功能? 但是这个线程不仅与愿望清单有关,还与如何实现该愿望清单有关。

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

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

我想创建一个"单一"应用程序,它将接受像dll这样的通用输入,也可以将输入作为源代码树(解决方案,项目.cs文件(,并以响应时间,识别瓶颈,内存泄漏等形式发出结果。

使用哪些工具作为 API 来为 .NET 应用程序构建通用性能探查器

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

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

然后,剩余的瓶颈就不必要地消耗时间,但开发人员没有注意到它们,因为探查器测量并没有隔离它们。

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

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

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