日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
.Net8GC堆對(duì)于云原生的支持

1.前言

云原生跟人工智能可能是未來的方向,.Net8里面為了對(duì)于提高云原生支持的成本效益??梢酝ㄟ^GC降低內(nèi)存限制來縮減資源消耗以及擴(kuò)展內(nèi)存資源提升性能。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),休寧縣企業(yè)網(wǎng)站建設(shè),休寧縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,休寧縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,休寧縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

2.概述

.Net8之前進(jìn)行此操作會(huì)失敗,因?yàn)镚C并沒有支持。.Net8則進(jìn)行了一定程度的支持,可以調(diào)用_RefreshMemoryLimit API來使用新的內(nèi)存限制更新GC。

反射調(diào)用此API:

MethodInfo refreshMemoryLimitMethod = typeof(GC).GetMethod(
    "_RefreshMemoryLimit", BindingFlags.NonPublic | BindingFlags.Static);
refreshMemoryLimitMethod.Invoke(null, Array.Empty);

以上代碼調(diào)用之后,它可以自動(dòng)縮減與擴(kuò)展云原生相關(guān)的內(nèi)存堆大小。以便更好適應(yīng)云原生。

還可以刷新與內(nèi)存限制相關(guān)的一些 GC 配置設(shè)置。以下代碼片段將堆硬限制設(shè)置為 100 兆字節(jié) (MiB):

AppContext.SetData("GCHeapHardLimit", (ulong)100 * 1024 * 1024);
MethodInfo refreshMemoryLimitMethod = typeof(GC).GetMethod(
    "_RefreshMemoryLimit", BindingFlags.NonPublic | BindingFlags.Static);
refreshMemoryLimitMethod.Invoke(null, Array.Empty);

在使用此API之前,它有幾個(gè)限制,需要注意下
1.由于_RefreshMemoryLimit API是專用的,因此需要通過專用反射來調(diào)用它。
2.不支持32位平臺(tái),比如windows/linux的32位或者arm32指令集。
3.調(diào)用此API不一定能成功,因?yàn)槿绻拗苹蛘邤U(kuò)展GC內(nèi)存過于激進(jìn)的話,它會(huì)返回失敗。如果出現(xiàn)這種情況,請(qǐng)考慮調(diào)用 

GC.Collect(2, GCCollectionMode.Aggressive) 以收縮當(dāng)前內(nèi)存使用量,然后重試。
4.如果縱向擴(kuò)展內(nèi)存限制超出GC認(rèn)為進(jìn)程在啟動(dòng)期間可以處理的大小,則_RefreshMemoryLimit 調(diào)用將成功,但它使用的內(nèi)存不能超過它所認(rèn)為的限制。

3.原理

_RefreshMemoryLimit實(shí)際調(diào)用的是QCall也即是GCInterface_RefreshMemoryLimit。而后者里面刷新了GC堆動(dòng)態(tài)和靜態(tài)數(shù)據(jù),以便適應(yīng)C#源碼層面適配的云原生擴(kuò)展和伸縮。

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);
    //此處生路一萬(wàn)行   
 }

我們看到它掛起了其它線程的操作,進(jìn)行了GC的SuspendEE操作。停止了其它線程,以便操作當(dāng)前線程。

參考:https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-8#garbage-collection


當(dāng)前名稱:.Net8GC堆對(duì)于云原生的支持
URL鏈接:http://www.5511xx.com/article/dphjpjg.html