我为其他程序编写了很多基于 .NET 的插件,这些程序通常编译为 DLL,由本机应用程序启动。我一直在使用 Equatec 的分析器,它效果很好,但现在想要具有更多功能的东西,包括分析内存使用情况的能力。
我尝试了 Red Gate 的 Ant Profiler,但据我所知,没有办法分析 DLL。唯一的选择是分析 EXE。
所以我的问题是还有哪些可用的分析工具可以让我分析单个库 DLL 而不是 EXE。我假设这需要像 Equatec 那样将配置文件代码注入库中?
我为其他程序编写了很多基于 .NET 的插件,这些程序通常编译为 DLL,由本机应用程序启动。我一直在使用 Equatec 的分析器,它效果很好,但现在想要具有更多功能的东西,包括分析内存使用情况的能力。
我尝试了 Red Gate 的 Ant Profiler,但据我所知,没有办法分析 DLL。唯一的选择是分析 EXE。
所以我的问题是还有哪些可用的分析工具可以让我分析单个库 DLL 而不是 EXE。我假设这需要像 Equatec 那样将配置文件代码注入库中?
是的,这确实有效。DLL 只是一个代码块,它与 EXE 中的代码合并。DLL 不能“拥有”任何内存,AppDomain 可以。但是,您可以看到在来自 DLL 的代码中花费了多少时间。
如果您编写的测试程序本身不会进行任何主要的内存分配,但会调用 DLL 中类的方法,那么您可以毫无问题地将内存使用归因于 DLL。然而,编写这样一个测试程序并使其类似于在实际程序中使用 DLL 代码的方式并不是那么容易。
.Net Memory Validator and .Net Performance Validator both allow you to profile just a dll.
You have to specify the DLLs you are interested in (or not interested in) in the "Hooked DLLs" part of the settings dialog. Then launch your application - only data from the specified DLL is collected.
Full disclosure: I am a software engineer at the company that creates these tools.
这可能不再与您相关,但我想我会把它放在这里以供后代使用,Redgate Ants 分析器确实允许您使用自定义过滤器来分析单个 dll:
我们使用 ANTS Profiler 3 项目向导以通常的方式设置“CoolApp”的性能分析。向导的最后一个屏幕是我们可以自定义项目以将分析限制为仅一个库的点。我们指定要使用自定义过滤器来限制将被分析的应用程序区域。
我们编辑自定义过滤器并指定我们只对分析特定命名空间感兴趣,如下所示。在这种情况下,我们设置了一个过滤器,它将导致 ANTS Profiler 仅分析属于 RedGate.Library1 命名空间的方法。这正是我们想要的,我们现在准备开始分析。
我们现在可以以通常的方式进行分析。但是,当我们通过拍摄快照或关闭应用程序获得性能分析结果时,它们将仅包含有关 RedGate.Library1.dll 中的方法的数据。
包含来自网站的文本,以防链接失效。