お世話になっております。
以下の状況でWindowsの環境でNewObjectされたUSaveGameが解放されない問題について、対処方法についての相談となります。
ISaveGameSystem::LoadGameAsync内から呼ばれる
bool FMySaveGameSystem::LoadGame(bool bAttemptToUseUI, const TCHAR* Name, const int32 UserIndex, TArray<uint8>& Data)
での処理内での以下関数で生成したUSaveGameがGCで解放されずゲーム終了時まで残り続けるという現象があり
bool IsValid() const { USaveGame* data = UGameplayStatics::LoadGameFromMemory(Data); return data != nullptr; }
そこで、下記フォーラムでの状況を参考にGarbageCollectionKeepFlags のクリアをしたところ、GCで解放されるようになりました。
[Content removed]
bool IsValid() const { USaveGame* data = UGameplayStatics::LoadGameFromMemory(Data); data->ClearInternalFlags(EInternalObjectFlags::GarbageCollectionKeepFlags); return data != nullptr; }
ただ、使用しているUEはUE5.3に以下フォーラムにあるタスクをBusyWaitの対象外にするパッチ
[Content removed]
とCL:30626322
を当てたものになり、そのタスク内でのことなので、パッチになにか不足していることによる副作用なのか?とも懸念しています。
この現象を解決するために、良い方法があればご教授いただけないでしょうか。
以上となります。
よろしくお願いいたします。