分析加载动态DLL的.NET应用程序

分析加载动态DLL的.NET应用程序,.net,dll,profiling,.net,Dll,Profiling,在我的应用程序中有一个“loader”可执行文件(我们称之为“loader.exe”)。它搜索特定文件夹中的DLL文件并逐个加载它们。然后用户可以选择运行哪个插件(插件有windows和业务逻辑)。这是我目前实现的一种插件架构 问题是,WPF和分析器的运行时资源管理器工具都看不到加载的DLL中发生了什么。例如,CLR探查器根本不收集任何数据 我能做些什么来修复这个问题而不重写项目的DLL加载部分吗?坦率地说,为什么这些分析器看不到加载的DLL代码?VS调试在这些方面效果很好。试试我的探查器www

在我的应用程序中有一个“loader”可执行文件(我们称之为“loader.exe”)。它搜索特定文件夹中的DLL文件并逐个加载它们。然后用户可以选择运行哪个插件(插件有windows和业务逻辑)。这是我目前实现的一种插件架构

问题是,WPF和分析器的运行时资源管理器工具都看不到加载的DLL中发生了什么。例如,CLR探查器根本不收集任何数据


我能做些什么来修复这个问题而不重写项目的DLL加载部分吗?坦率地说,为什么这些分析器看不到加载的DLL代码?VS调试在这些方面效果很好。

试试我的探查器www.xteprofiler.com,如果它不起作用,我会这么做。

试试我的探查器www.xteprofiler.com,如果它不起作用,我会这么做。

既然VS调试在这些方面效果很好,你可以使用随机暂停来发现性能问题。()它快速、肮脏、便宜,而且是最好的。是的,调试器工作得很好。并且可以用来做一些“分析”。然而,我一直在处理复杂的代码,这些代码并不容易调试。此外,调试可以通过WPF绑定触发的内容和方法调用也不是很明显。总而言之,我喜欢VS调试器,我同意它可以用来做一些事情,但是对于我来说,一个工作的探查器是一个更好的选择,它可以让我了解正在发生的事情以及哪些方法不是那么有效。@Jefim:MS产品通常质量很高,但评测往往会受到普遍误解的影响。它显示在您使用的“概述正在发生的事情以及哪些方法效率不高”。方法通常不是低效的,分析器也不会真正告诉您发生了什么。他们只是测量东西。如果你想消除浪费的时间,你必须像一个树外科医生一样思考呼叫树。stackshots告诉您哪些活动花费的时间最多,哪些语句(而不是方法)需要集中精力。。。。复杂的代码不是问题。我经常在我们的应用程序中发现问题,该应用程序由30多个.net插件组成,其堆栈深度约为30层。典型问题:50%的时间不必要地用于从资源中提取国际化字符串。这就是我所说的“活动”,没有明显低效的方法。我敢说没有一个分析器能够找到这样一个问题的线索。根据你的问题,加载程序似乎是一个独立的进程?如果是这样,那么这就是为什么您的评测没有产生任何结果——这个过程根本没有被评测。如果是相同的过程,那么大多数.NET探查器应该能够为您提供跟踪树或任何您需要的内容。您尝试过哪些分析器?由于VS调试在这些分析器中工作得很好,您可以使用随机暂停来查找性能问题。()它快速、肮脏、便宜,而且是最好的。是的,调试器工作得很好。并且可以用来做一些“分析”。然而,我一直在处理复杂的代码,这些代码并不容易调试。此外,调试可以通过WPF绑定触发的内容和方法调用也不是很明显。总而言之,我喜欢VS调试器,我同意它可以用来做一些事情,但是对于我来说,一个工作的探查器是一个更好的选择,它可以让我了解正在发生的事情以及哪些方法不是那么有效。@Jefim:MS产品通常质量很高,但评测往往会受到普遍误解的影响。它显示在您使用的“概述正在发生的事情以及哪些方法效率不高”。方法通常不是低效的,分析器也不会真正告诉您发生了什么。他们只是测量东西。如果你想消除浪费的时间,你必须像一个树外科医生一样思考呼叫树。stackshots告诉您哪些活动花费的时间最多,哪些语句(而不是方法)需要集中精力。。。。复杂的代码不是问题。我经常在我们的应用程序中发现问题,该应用程序由30多个.net插件组成,其堆栈深度约为30层。典型问题:50%的时间不必要地用于从资源中提取国际化字符串。这就是我所说的“活动”,没有明显低效的方法。我敢说没有一个分析器能够找到这样一个问题的线索。根据你的问题,加载程序似乎是一个独立的进程?如果是这样,那么这就是为什么您的评测没有产生任何结果——这个过程根本没有被评测。如果是相同的过程,那么大多数.NET探查器应该能够为您提供跟踪树或任何您需要的内容。你试过什么剖析器?