我有一個.NET進程,由於我不會進入的原因,會消耗大量的RAM。我想要做的是實現此進程可以使用的RAM數量的上限。有沒有辦法做到這一點?限制.NET進程可以使用的最大內存量?
我發現的最接近的是Process.GetCurrentProcess().MaxWorkingSet
我不認爲我做我基礎已經閱讀文檔上想要什麼。
我想出了使用GC.GetTotalMemory(true)
得到使用,並重新啓動,如果它是在一定量的RAM量最好。但這並不理想。
我有一個.NET進程,由於我不會進入的原因,會消耗大量的RAM。我想要做的是實現此進程可以使用的RAM數量的上限。有沒有辦法做到這一點?限制.NET進程可以使用的最大內存量?
我發現的最接近的是Process.GetCurrentProcess().MaxWorkingSet
我不認爲我做我基礎已經閱讀文檔上想要什麼。
我想出了使用GC.GetTotalMemory(true)
得到使用,並重新啓動,如果它是在一定量的RAM量最好。但這並不理想。
您可以通過撥打SetProcessWorkingSetSizeEx或SetProcessWorkingSetSize來設置進程工作集的最小和最大大小。
沒有爲SetProcessWorkingSetSize一個pinvoke.net條目。
請務必閱讀MSDN文檔爲準功能,您決定調用。
請注意,這並不妨礙你的應用程序分配更多的虛擬內存,而是把對進程的虛擬內存有多少物理內存佔用在任何給定的時間限制。
這與分配Process.Min/MaxWorkingSet屬性沒有區別。只需在[參考資源](http://referencesource.microsoft.com/#System/services/monitoring/system/diagnosticts/Process.cs#505)中查看即可。 – 2014-11-05 21:27:31
這是我的理解,這些是虛擬管理器使用的限制,將在內存不足時執行。只要有足夠的內存可用,當前的工作集大小就允許增長大於MaxWorkingSet中的值。因此,不解決我的問題。 – Coltech 2014-11-05 21:52:59
您可以檢查您的使用情況,並把自己關下來(或寫看門狗),但你不能讓操作系統去做。 – BradleyDotNET 2014-11-05 21:14:35
@BradleyDotNET:完全不對。看到我的答案。 – 2014-11-05 21:21:24
@JimMischel它並不完全是一個硬性限制:「進程的最大工作集大小,以字節爲單位虛擬內存管理器在進程處於活動狀態並且可用內存不足時,會嘗試保留駐留在進程中的內存量不多「。也就是說,我不知道這個功能,謝謝(你的)信息! – BradleyDotNET 2014-11-05 21:22:26