WCF性能計數器內存優化方式解析
WCF中有一種叫做性能計數器的集合,可以幫助我們實現一些特定功能。如果要想得到一個好的結果,我們需要對WCF性能計數器內存急性優化。#t#
WCF 為其性能計數器類別使用單獨的共享內存。
默認情況下,單獨的共享內存被設置為全局性能計數器內存大小的四分之一。默認的全局性能計數器內存大小為 524,288 字節。因此,三個 WCF 性能計數器類別默認分別具有約 128KB 的內存大小。根據計算機上 WCF 應用程序的運行時特性,性能計數器內存可能會用盡。發生這種情況時,WCF 會向應用程序事件日志中寫入一個錯誤。
該錯誤的內容聲明未加載性能計數器,并聲明一個包含異常“System.InvalidOperationException:可用于自定義計數器文件視圖的內存不足。”的項。如果在錯誤級別啟用了跟蹤,此故障也將被跟蹤。如果性能計數器內存已用盡,在啟用性能計數器的情況下繼續運行您的 WCF 應用程序可能會導致性能明顯下降。
如果您是計算機管理員,則應對計算機進行配置,以便分配足夠的WCF性能計數器內存來支持隨時可能存在的最大數量的性能計數器。有關更多信息,請參見 performanceCounters(可能為英文網頁)。
可以在注冊表中更改 WCF 類別的性能計數器的內存量。為此,需要向以下三個位置添加名為 FileMappingSize 的新 DWORD 值,并將它設為所需的值(以字節為單位)。重新啟動您的計算機以使這些更改生效。
HKLM\System\CurrentControlSet\Services\ServiceModelEndpoint 3.0.0.0\Performance
HKLM\System\CurrentControlSet\Services\ServiceModelOperation 3.0.0.0\Performance
HKLM\System\CurrentControlSet\Services\ServiceModelService 3.0.0.0\Performance
當釋放的大量對象(例如 ServiceHost)等待進行垃圾回收時,PrivateBytes 性能計數器將記錄一個非常大的數字。若要解決WCF性能計數器內存問題,可以添加特定于自己的應用程序的計數器,或使用 performanceCounters 屬性僅啟用服務級別計數器。