C# 使用哪些工具作为api为.net应用程序构建通用性能分析器?

C# 使用哪些工具作为api为.net应用程序构建通用性能分析器?,c#,sql-server,profiler,C#,Sql Server,Profiler,我知道这里已经有人问过类似的问题,但是这个帖子不仅是关于愿望列表的,而且是关于如何实现愿望列表的 让我再问你一次。我正在构建一个通用性能分析器。我知道我可以将dll作为输入,并采用常用的秒表方法来分析该dll中方法的响应时间。但这是非常基本的东西。我愿意使用第三方api(或者自己编写一些代码)从dll中提取任何有用的信息。我想知道一切让它慢下来的东西。我想知道它的内存泄漏。任何有助于我发现应用程序瓶颈的东西。我想要类似的方法来找到昂贵的数据库操作。但所有这些,在一个应用程序下 那么你建议采取什么

我知道这里已经有人问过类似的问题,但是这个帖子不仅是关于愿望列表的,而且是关于如何实现愿望列表的

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

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

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

任何能帮我找到瓶颈的东西 应用程序

请注意普遍的分析假设,即测量无误地导致瓶颈所在,因为有些瓶颈可以通过这种方式找到,但只有一些瓶颈

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

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

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


看到这类问题的不是度量,而是程序状态的少量样本,开发人员可以在这些样本中全面检查和描述每个样本的内容(调用堆栈和数据)。这比测量方法或浏览调用图更好地理解程序花费时间的方式和原因。

您正在寻找.Net评测API。在一般情况下(特别是将DLL作为输入和输出),这是一个非常复杂的问题;确保你没有低估这里可能涉及的内容!有人几乎可以说(虽然不是很明显):“如果你自己还不能回答这个问题,那么你写一个有效的剖析器的机会微乎其微”@MarcGravel-那么你应该如何从其他项目中获取信息呢?我现在正处于计划阶段。定义“从其他项目中获取输入”@marcgravel-好吧,我可以访问项目的源代码,因为它们都是我们自己公司的产品。现在我的输入应该是什么?如果我把DLL作为输入,试着对它们进行反思,然后继续分析它们,那么速度会非常慢。