前提・実現したいこと
「Action(C#デリゲート)」を使用してます。
現状、isUpdateMethod()の引数に関数を渡すだけでGC(GC.Alloc)が走るのを何とかしたいです。
試した事(以下)に記載しておりますが、
「nameof」を使用してGCを走らせない事は確認してます。
しかしながらcheckMethod()の使用箇所が多いので「修正箇所が多い事と不便である」ので
何かしらの方法で改善したいです。
該当のソースコード
UpdateClass instance; void mainLoop() { instance.update(); // loop駆動関係(詳細は長いので省略します) if(instance.isUpdateMethod(instance.updateA)){ // HIT } } class UpdateClass { Loop loop; // loop駆動関係(詳細は長いので省略します) public void updateA(){処理A} public void updateB(){処理B} void update(){ for(int i=0; i<length; ++i){ loop.update(); //処理 } } bool isUpdateMethod( Action meth ) { rerturn update.func == meth; } }
試したこと
============================================================ 試した事1:nameofを使用してstringで渡す ・利点 → GCは走らない、関数をリネームしてもコード修正が要らない ・欠点 → nameofを記載する手間が掛る void mainLoop() { if(isUpdateMethod(nameof(instance.updateA))){ } } bool isUpdateMethod( string meth ){} ============================================================ 試した事2:インターフェースの使用 実装上インスタンスの関数を使用したい為、現実味が無い。 参考にした → https://baba-s.hatenablog.com/entry/2017/12/28/205800 ============================================================
GC って何ですか?
質問文を修正しました。(GC.Alloc)
意味がわかりません。どういうことですか?
GCはガベージコレクションですよね?
どうしてGCを起動したくないんでしょうか?
Unity の話なら Unity のタグをつけてください。
Unity に興味のある人の目を引いて回答を得られるチャンスが増えるでしょうし、Unity に興味のない人はスルー出来るということで、質問者・閲覧者両方にメリットがあります。
ガベージコレクションはそんなに規則的に起こるものではないので、まずどういう現象で何が問題なのかを確認しないと、斜め方向に突き進むことになると思います。
> ガベージコレクションはそんなに規則的に起こるものではない
条件次第では、結構、規則的に発生しますね。
(直そうとしたら、別のエラーで断念したけど)