如何查看我的应用程序加载了哪些dll?

时间:2012-03-12 08:16:09

标签: c# winforms memory

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

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

我希望你能帮助我。

编辑: 我的信息:说硬盘上的foo.dll是2MB。当在我的应用程序中使用并加载此dll时,此文件是否还需要2MB的内存?

6 个答案:

答案 0 :(得分:2)

如果您在win7 / vista(?)上运行或类似,您可以检查资源监视器/ CPU /关联模块选项卡:

enter image description here

答案 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>