如何查看哪个dll被我的应用程序加载?
我想知道我是如何看到哪些dll被我的应用程序加载的。我想知道这一点,因为应用程序消耗大量内存,大约400-500 MB(专用字节)。如何查看哪个dll被我的应用程序加载?
我已经使用memprofiler为.NET分析了我的应用程序,但是我找不到任何内存泄漏,所以我想也许有一些dll的加载非常大。如果是这种情况,我可以证明我的应用程序的内存使用情况。
我希望你能帮助我。
编辑: 对于我的信息:说硬盘上的foo.dll是2MB。当这个DLL被使用并加载到我的应用程序中时,该文件是否也占用了2MB的内存?
如果你是在WIN7/Vista上运行或similiar您可以检查资源监视器/ CPU /关联的模块选项卡(?):
tasklist /m
在命令行至少显示的加载的DLL每个应用程序运行最缺少的是每个dll的memoryusage的信息。
希望帮助一点点 萨沙
在磁盘上的可执行文件没有说,这将需要多少内存在运行时的大小。例如,您可以拥有一个分配大量内存的小应用程序。
400-500 MB对于您的应用程序是否太多取决于您当前的操作。其中最大的部分不会由DLL加载引起,而是由运行时分配的内存引起。尝试使用分析器来显示哪种类型的对象分配了应用程序中的内存量。这通常已经告诉你在哪里看。
感谢的外观极好的工具,你知道(简单)分析器,它显示哪个对象分配它使用多少内存? – Martijn 2012-03-12 08:36:26
[.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所用的内存与运行时分配的内存相比是可以忽略的。正如所述,使用一个分析器来查看所有内存在哪里!
在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();
看看[进程资源管理器(http://technet.microsoft.com/en-us/sysinternals/bb896653),它是由标记Russinovich作出 – oleksii 2012-03-12 08:22:46