生じている問題
Cysharp.Threading.Tasks.LinqのAwait系を使うと致命的なGC Allocが発生し,フレームレートが低下してしまいます.
UniTaskはzero allocationで有名ですが,UniTaskAsyncEnumerableはその限りではないのでしょうか?
(ちなみに,私はUniRxをあえて採用せずUniTaskAsyncEnumerableを使っています.)
ご回答よろしくお願いいたします.
該当のコード
下記コードでHp(IAsyncReactiveProperty<int>型)が変化した瞬間GC Allocが発生し,大きなフレームレート低下を引き起こします.
Subscribeの中身やawaitする非同期関数の種類は関係なく,SelectAwaitでawaitするとこの現象が引き起こされるようです.
C#
1_playerStatus.Hp.WithoutCurrent() 2 .SelectAwait(async _ => 3 { 4 await UniTask.Delay(2000); 5 return AsyncUnit.Default; 6 }) 7 .Subscribe(_ => 8 { 9 Debug.Log("change HP"); 10 });
ちなみに下記のユースケースでは上記のような現象は発生しません.
C#
1async void Update() 2 { 3 if (Input.GetKeyDown(KeyCode.Space)) 4 { 5 await UniTask.Delay(1000); 6 } 7 }
プロファイラー

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/10/29 03:28 編集