[UE4]對象內存常駐的四種方式

[UE4]對象內存常駐的四種方式

來自專欄虛幻引擎9 人贊了文章

keywords:UE4, Memory Persist, GC, 垃圾回收, 內存管理

防止GC的辦法

要防止對象被GC,有4種方式:

  • 作為成員變數並標記為UPROPERTY()
  • 創建對象後 AddToRoot() ;(退出遊戲時需要RemoveFromRoot()
  • FStreamableManager Load資源時,bManageActiveHandle 設置為true;
  • FGCObjectScopeGuard 在指定代碼區域內保持對象;

注意:

一個UObject類型的變數,即使是static,默認也會被GC掉。

UPROPERTY()用法

URPOPERTY() UObject* MyObj;

AddToRoot()用法

UMyObject* MyObj = NewObject<UMyObject>();MyObj.AddToRoot();

FStreamableManager 用法

FSoftObjectPath AssetPath(TEXT("/Game/Mannequin/Animations/ThirdPersonWalk.ThirdPersonWalk"));FStreamableManager& AssetLoader = UAssetManager::GetStreamableManager();//hold object in memory.TSharedPtr<FStreamableHandle> Handle = AssetLoader.RequestSyncLoad(AssetPath, true);UObject* Obj = Handle->GetLoadedAsset();//free memory of object.Handle->ReleaseHandle();

FGCObjectScopeGuard 用法

{ FGCObjectScopeGuard(UObject* GladOS = NewObject<...>(...)); GladOS->SpawnCell(); RunGC(); GladOS->IsStillAlive(); // Object will not be removed by GC}

注意事項:

Uobject不能使用TSharedPtr進行引用計數,如果一個非UObject的類想加入GC,那麼必須繼承FGCObject類。(感謝 知乎用戶的指正~)

參考資料

虛幻4垃圾回收剖析

cnblogs.com/ghl_carmack

UE4內存管理 – 實踐

blog.csdn.net/yangxuan0


推薦閱讀:

真良心大廠EPIC,頁游廣告又有新素材了!
Begin ray marching in unreal engine 4【第五卷:使用偽3D體紋理渲染雲】
[UE4]動畫藍圖的編輯全流程(Animation Blueprint)
[UE4]Generate Visual Studio工程時如何指定VS版本

TAG:虛幻引擎 | 虛幻4遊戲引擎 |