新聞中心
1.前言
云原生跟人工智能可能是未來的方向,.Net8里面為了對于提高云原生支持的成本效益。可以通過GC降低內(nèi)存限制來縮減資源消耗以及擴展內(nèi)存資源提升性能。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,休寧縣企業(yè)網(wǎng)站建設,休寧縣品牌網(wǎng)站建設,網(wǎng)站定制,休寧縣網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,休寧縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
2.概述
.Net8之前進行此操作會失敗,因為GC并沒有支持。.Net8則進行了一定程度的支持,可以調(diào)用_RefreshMemoryLimit API來使用新的內(nèi)存限制更新GC。
反射調(diào)用此API:
MethodInfo refreshMemoryLimitMethod = typeof(GC).GetMethod(
"_RefreshMemoryLimit", BindingFlags.NonPublic | BindingFlags.Static);
refreshMemoryLimitMethod.Invoke(null, Array
以上代碼調(diào)用之后,它可以自動縮減與擴展云原生相關的內(nèi)存堆大小。以便更好適應云原生。
還可以刷新與內(nèi)存限制相關的一些 GC 配置設置。以下代碼片段將堆硬限制設置為 100 兆字節(jié) (MiB):
AppContext.SetData("GCHeapHardLimit", (ulong)100 * 1024 * 1024);
MethodInfo refreshMemoryLimitMethod = typeof(GC).GetMethod(
"_RefreshMemoryLimit", BindingFlags.NonPublic | BindingFlags.Static);
refreshMemoryLimitMethod.Invoke(null, Array
在使用此API之前,它有幾個限制,需要注意下
1.由于_RefreshMemoryLimit API是專用的,因此需要通過專用反射來調(diào)用它。
2.不支持32位平臺,比如windows/linux的32位或者arm32指令集。
3.調(diào)用此API不一定能成功,因為如果限制或者擴展GC內(nèi)存過于激進的話,它會返回失敗。如果出現(xiàn)這種情況,請考慮調(diào)用
GC.Collect(2, GCCollectionMode.Aggressive) 以收縮當前內(nèi)存使用量,然后重試。
4.如果縱向擴展內(nèi)存限制超出GC認為進程在啟動期間可以處理的大小,則_RefreshMemoryLimit 調(diào)用將成功,但它使用的內(nèi)存不能超過它所認為的限制。
3.原理
_RefreshMemoryLimit實際調(diào)用的是QCall也即是GCInterface_RefreshMemoryLimit。而后者里面刷新了GC堆動態(tài)和靜態(tài)數(shù)據(jù),以便適應C#源碼層面適配的云原生擴展和伸縮。
GCHeapUtilities::GetGCHeap()->RefreshMemoryLimit();
然后
int gc_heap::refresh_memory_limit()
{
refresh_memory_limit_status status = refresh_success;
if (GCConfig::GetGCTotalPhysicalMemory() != 0)
{
return (int)status;
}
GCToEEInterface::SuspendEE(SUSPEND_FOR_GC);
//此處生路一萬行
}
我們看到它掛起了其它線程的操作,進行了GC的SuspendEE操作。停止了其它線程,以便操作當前線程。
參考:https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-8#garbage-collection
本文題目:.Net8GC堆對于云原生的支持
路徑分享:http://www.5511xx.com/article/dphjpjg.html


咨詢
建站咨詢
