[英]how do I include dll's such as kernel32.dll which my unmanaged dll needs
[英]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.