簡體   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