我想知道如何查看我的应用程序加载了哪些dll。我想知道这个,因为应用程序消耗了大量内存,大约400-500 MB(专用字节)。
我用memprofiler for .NET描述了我的应用程序,但我找不到任何内存泄漏,所以我想也许有一些dll的加载非常大。如果是这种情况,我可以证明我的应用程序的内存使用情况。
我希望你能帮助我。
编辑: 我的信息:说硬盘上的foo.dll是2MB。当在我的应用程序中使用并加载此dll时,此文件是否还需要2MB的内存?
答案 0 :(得分:2)
如果您在win7 / vista(?)上运行或类似,您可以检查资源监视器/ CPU /关联模块选项卡:
答案 1 :(得分:2)
磁盘上可执行文件的大小并未说明运行时需要多少内存。例如,您可以拥有一个分配大量内存的小应用程序。
400-500 MB对于您的应用来说是否太多取决于您正在做什么,当然。其中最大的部分不是由加载的DLL引起的,而是由运行时分配的内存引起的。尝试使用分析器来显示哪种类型的对象分配应用程序中的内存量。这通常已经告诉你在哪里看。
答案 2 :(得分:2)
var modules = Process.GetCurrentProcess()
.Modules
.Cast<ProcessModule>()
.Select(m=>new {Name = m.ModuleName, Size = m.ModuleMemorySize })
.ToArray();
答案 3 :(得分:0)
tasklist /m
至少显示运行的每个应用程序的已加载dll。丢失的是每个dll的记忆信息。
希望有所帮助 的Sascha
答案 4 :(得分:0)
不,这不是因为您的.dll文件在硬盘驱动器上是2mb,它只会占用2mb的内存。一个DLL只是一个程序。所以就像拥有一个2mb大小的.exe一样。如果它进行大量计算并分配大量内存,它可以轻松使用2gb:)
编辑:如下所述,与运行时分配的内存相比,加载DLL所用的内存是可忽略的。如上所述,使用分析器查看所有内存的来源!
答案 5 :(得分:0)
在Visual Studio中,在调试应用程序时检查Window-&gt; Module视图。你会看到所有加载的模块。
你不太可能有足够的DLL来使用这么多的地址空间。缺少内存泄漏并不意味着您没有不需要的对象。如果你需要找出什么需要内存 - 仔细查看分配了什么对象,还要估计程序应该采取多少内存(即加载100Mb XML文件并期望100Mb内存使用是不现实的)。 / p>