2008-09-19 55 views
19

有沒有觸發來自另一個進程或從內部的WinDBG一個.NET過程垃圾收集的方法嗎?觸發一個.NET垃圾收集外部

有託管調試助手,當您在本地/託管邊界移動時強制收集,而AQTime似乎有按鈕表明它已這樣做,但我找不到有關如何執行此操作的任何文檔。

+0

[從命令行運行垃圾收集器?]可能的重複(http://stackoverflow.com/questions/3594069/run-garbage-collector-from-command-line) – 2016-02-02 16:41:58

回答

2

約翰Cocktoastan的答案使用GC.Collect的時候在Visual Studio中是最好的選擇,如果有。

我仍然無法找到實際做的集合下的WinDBG但退一步到的問題的另「多少內存是可回收的?」 (見我對約翰的回答評論)我認爲是通過!DumpHeap和!GCRoot的某種組合使用腳本(PowerDBG?)搜索來查找無根把手替代和總使用的空間(基本模擬算法GC會使用調試器)。但是由於考慮到這一點,我還沒有遇到過這些錯誤之一,所以還沒有試圖寫代碼來做到這一點。

0

如果暴露通過Remoting的函數/對象,這可能是很容易做到。

+0

我很有趣的應用程序與目前不支持遠程處理,僅僅爲此添加它是不可行的。 – 2008-09-19 12:02:07

+0

爲什麼單個暴露的遠程物體是不可行的?你可以用少於20行來完成。這裏是一個小例子:http://xacc.svn.sourceforge.net/viewvc/xacc/xacc/Configuration/KickStart.cs?view=markup – leppie 2008-09-19 13:02:36

+0

因爲它是一個本地C++的應用程序,僅通過COM訪問達網絡,並且當有很多C#保證可以訪問的數量,在這種情況下,您可以將其更小。也有非技術原因。 – 2008-09-19 13:15:01

11

呃......有直接的窗口。如果你有附加的過程的奢侈,我想你可以在直接窗口中手動GC.Collect。

更大的問題:爲什麼你想手動誘發GC.Collect的?這是一個討厭的習慣,並且表明有更大的設計問題。

8

回答another question

基本上,使用PerfView

PerfView.exe ForceGC [ProcessName | Process ID] /AcceptEULA 

它不是用於生產用途。