2012-03-12 69 views
0

我想知道我是如何看到哪些dll被我的應用程序加載的。我想知道這一點,因爲應用程序消耗大量內存,大約400-500 MB(專用字節)。如何查看哪個dll被我的應用程序加載?

我已經使用memprofiler爲.NET分析了我的應用程序,但是我找不到任何內存泄漏,所以我想也許有一些dll的加載非常大。如果是這種情況,我可以證明我的應用程序的內存使用情況。

我希望你能幫助我。

編輯: 對於我的信息:說硬盤上的foo.dll是2MB。當這個DLL被使用並加載到我的應用程序中時,該文件是否也佔用了2MB的內存?

+0

看看[進程資源管理器(http://technet.microsoft.com/en-us/sysinternals/bb896653),它是由標記Russinovich作出 – oleksii 2012-03-12 08:22:46

回答

2

如果你是在WIN7/Vista上運行或similiar您可以檢查資源監視器/ CPU /關聯的模塊選項卡(?):

enter image description here

0

tasklist /m在命令行至少顯示的加載的DLL每個應用程序運行最缺少的是每個dll的memoryusage的信息。

希望幫助一點點 薩沙

2

在磁盤上的可執行文件沒有說,這將需要多少內存在運行時的大小。例如,您可以擁有一個分配大量內存的小應用程序。

400-500 MB對於您的應用程序是否太多取決於您當前的操作。其中最大的部分不會由DLL加載引起,而是由運行時分配的內存引起。嘗試使用分析器來顯示哪種類型的對象分配了應用程序中的內存量。這通常已經告訴你在哪裏看。

+0

感謝的外觀極好的工具,你知道(簡單)分析器,它顯示哪個對象分配它使用多少內存? – Martijn 2012-03-12 08:36:26

+0

[.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

0

不,這不是因爲你的.dll文件在硬盤上是2mb,它只會佔用2MB的內存。一個DLL只是一個程序。所以它就像擁有一個2MB大小的.exe文件一樣。如果它進行大量計算並分配大量內存,它可以輕鬆使用2GB。)

編輯:如下所述,加載DLL所用的內存與運行時分配的內存相比是可以忽略的。正如所述,使用一個分析器來查看所有內存在哪裏!

+0

Thnx。你知道一個分析器來查看我的記憶在哪裏嗎? – Martijn 2012-03-12 08:39:16

+0

我使用的是VS 2010最終的剖析器,它對我來說足夠了,因爲我沒有做太多的剖析。只要做一些檢查一切正確的事情(有時你在算法中犯了一些錯誤,這會導致太多的CPU使用率,分析器會很容易地選出它們) – squelos 2012-03-12 08:43:19

0

在Visual Studio中,在調試應用程序時檢出Window-> Module視圖。你會看到所有加載的模塊。

這是不可能的,你有足夠的DLL來使用這麼多的地址空間。缺乏內存泄漏並不意味着你沒有任何你不需要的東西。如果你需要找出什麼需要記憶 - 仔細看看分配了哪些對象,還要估計你的程序應該應該佔用多少內存(即加載100Mb XML文件並期望100Mb內存使用是不現實的)。

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