如何查看哪个dll被我的应用程序加载?

问题描述:

我想知道我是如何看到哪些dll被我的应用程序加载的。我想知道这一点,因为应用程序消耗大量内存,大约400-500 MB(专用字节)。如何查看哪个dll被我的应用程序加载?

我已经使用memprofiler为.NET分析了我的应用程序,但是我找不到任何内存泄漏,所以我想也许有一些dll的加载非常大。如果是这种情况,我可以证明我的应用程序的内存使用情况。

我希望你能帮助我。

编辑: 对于我的信息:说硬盘上的foo.dll是2MB。当这个DLL被使用并加载到我的应用程序中时,该文件是否也占用了2MB的内存?

+0

看看[进程资源管理器(http://technet.microsoft.com/en-us/sysinternals/bb896653),它是由标记Russinovich作出 – oleksii 2012-03-12 08:22:46

如果你是在WIN7/Vista上运行或similiar您可以检查资源监视器/ CPU /关联的模块选项卡(?):

enter image description here

tasklist /m在命令行至少显示的加载的DLL每个应用程序运行最缺少的是每个dll的memoryusage的信息。

希望帮助一点点 萨沙

在磁盘上的可执行文件没有说,这将需要多少内存在运行时的大小。例如,您可以拥有一个分配大量内存的小应用程序。

400-500 MB对于您的应用程序是否太多取决于您当前的操作。其中最大的部分不会由DLL加载引起,而是由运行时分配的内存引起。尝试使用分析器来显示哪种类型的对象分配了应用程序中的内存量。这通常已经告诉你在哪里看。

+0

感谢的外观极好的工具,你知道(简单)分析器,它显示哪个对象分配它使用多少内存? – Martijn 2012-03-12 08:36:26

+0

[.NET CLR Profiler](http://www.microsoft.com/download/en/details.aspx?id=16273)是免费的。或者查看商业性能分析器的演示版本,例如[dotTrace](http://www.jetbrains.com/profiler/) – 2012-03-12 08:40:05

不,这不是因为你的.dll文件在硬盘上是2mb,它只会占用2MB的内存。一个DLL只是一个程序。所以它就像拥有一个2MB大小的.exe文件一样。如果它进行大量计算并分配大量内存,它可以轻松使用2GB。)

编辑:如下所述,加载DLL所用的内存与运行时分配的内存相比是可以忽略的。正如所述,使用一个分析器来查看所有内存在哪里!

+0

Thnx。你知道一个分析器来查看我的记忆在哪里吗? – Martijn 2012-03-12 08:39:16

+0

我使用的是VS 2010最终的剖析器,它对我来说足够了,因为我没有做太多的剖析。只要做一些检查一切正确的事情(有时你在算法中犯了一些错误,这会导致太多的CPU使用率,分析器会很容易地选出它们) – squelos 2012-03-12 08:43:19

在Visual Studio中,在调试应用程序时检出Window-> Module视图。你会看到所有加载的模块。

这是不可能的,你有足够的DLL来使用这么多的地址空间。缺乏内存泄漏并不意味着你没有任何你不需要的东西。如果你需要找出什么需要记忆 - 仔细看看分配了哪些对象,还要估计你的程序应该应该占用多少内存(即加载100Mb XML文件并期望100Mb内存使用是不现实的)。

var modules = Process.GetCurrentProcess() 
       .Modules 
       .Cast<ProcessModule>() 
       .Select(m=>new {Name = m.ModuleName, Size = m.ModuleMemorySize }) 
       .ToArray();