繁体   English   中英

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

[英]How can I see which dll's are loaded by my application?

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

我已经使用.mmeprofiler对我的应用程序进行了概要分析,但是我找不到任何内存泄漏,因此我认为可能是某些dll加载的非常大。 如果是这种情况,我可以证明应用程序的内存使用合理。

我希望你能帮助我。

编辑:就我的信息:说硬盘驱动器上的foo.dll是2MB。 使用此dll并将其加载到我的应用程序中后,此文件还会占用2MB的内存吗?

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

在此处输入图片说明

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

当然,对于您的应用程序而言,400-500 MB是否太大取决于您在做什么。 其中最大的部分不是由DLL加载引起的,而是由运行时分配的内存引起的。 尝试使用一个探查器,该探查器向您显示哪种类型的对象在应用程序中分配了多少内存。 这通常已经告诉您在哪里看。

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

命令行上的tasklist /m至少显示正在运行的每个应用程序的已加载dll。 缺少的是每个dll的内存使用信息。

希望对Sascha有所帮助

不,不是因为您的.dll文件在硬盘驱动器上只有2mb,所以它只会占用2mb的内存。 dll就是一个程序。 因此,就像拥有一个大小为2mb的.exe一样。 如果进行大量计算并分配大量内存,它很容易用完2gb :)

编辑:如下所述,与运行时分配的内存相比,通过加载DLL消耗的内存是可以忽略的。 因此,如前所述,使用探查器查看所有内存的去向!

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

您可能没有足够的DLL使用这么多的地址空间。 内存泄漏的缺乏并不意味着您没有不需要的对象。 如果您需要找出占用内存的资源-仔细查看分配了哪些对象,则还应估算程序占用的内存(即加载100Mb XML文件并期望100Mb内存使用是不现实的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM