簡體   English   中英

限制服務允許的RAM,可以使用MaxWorkingSet

[英]Limiting the allowed RAM for a service, possible using MaxWorkingSet

我有一個在域控制器上運行的服務,該域控制器被網絡上的其他計算機隨機訪問。 我無法關閉服務並僅在需要時運行它(無論如何,這將違背將其作為服務運行的目的)。 問題在於該服務使用的內存似乎從未被清除,而是在遠程計算機每次查詢該服務時都會增加。 有沒有辦法設置應用程序使用的RAM的限制?

我發現了一些使用MaxWorkingSet的參考,但是沒有一個參考實際上告訴我如何使用它。 我可以使用MaxWorkingSet將使用的RAM限制為例如35MB嗎? 如果是這樣,怎么辦? (語法是什么?)

否則,是否有類似“ clearall()”的函數可用於在每次運行結束時重置變量和內存? 我試過使用GC.Collect(),但是沒有用。

從字面上看, MaxWorkingSet僅影響工作集,即物理內存量。 要限制整體內存使用量,您需要Job Object API 但是如果您的程序確實需要這種內存是很危險的(許多代碼沒有考慮OutOfMemoryException,並且有時當內存不足時.NET運行時會有奇怪的行為)

你需要:

  • 創建一個Win32 Job對象
  • 設置作業的最大內存
  • 將工作分配給工作

是.NET的包裝。 ^參考

此外,您可以嘗試以下這種GC方法:(適用於.NET 4.6或更高版本)

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect(2, GCCollectionMode.Forced, true, true);

(對於年齡較大但有時不起作用的人)

GC.Collect(2, GCCollectionMode.Forced);

4.6版本的GC.Collect()的第三個參數是告訴運行時是否立即進行垃圾收集。 在較舊的版本中, GC.Collect()僅通知並將決定留給運行時。

至於一些編程建議,我建議您可以為一個查詢包裝一個類。 查詢完成后,可以顯式處理該類。 這可能有助於使GC更智能。

最后,.NET框架中確實需要管理一些東西。 Bitmap.GetHBitmap一樣,它們需要手動處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM