私は、割り当てられたオブジェクトを取得し、後でその割り当てをリサイクルするプーリングアルゴリズムに取り組んでいます。ただし、オブジェクトのリサイクルに関する問題の1つは、たとえば次のとおりです。
someObject obj = pool.alloc(); //gives me a new object if no previous allocations, If an allocation has been recycled, returns a previous allocation
obj.someVariable = "foo";
pool.recycle(obj);
上記のコードは既存の割り当てを取得して保存するため、別のsomeObjectがある場合に備えて余分なRAMを割り当てる必要はありません。ただし、次の場合に問題が発生します。
someObject obj = pool.alloc(); //gives me the above allocation
obj.otherVariable = "bar";
obj.dump();
その結果、次の結果が得られます。
someVariable = foo
otherVariable = bar
上記のアプローチは問題を引き起こします。何らかの理由で(または他の誰かが)オブジェクト内で特定の変数を使用しないアルゴリズムを使用している場合、古い値によって不要な動作が発生する可能性があります。デフォルトのコンストラクターを再度呼び出す方法があるかどうかを確認するために少し調べましたが(悪い考え)、C#では(ありがたいことに)そうすることができないようです。しかし、これを行うためにリフレクションを使用する方法があるかどうか疑問に思いましたか?また、オブジェクト内の変数をクリアすると、malloc(新規)を回避する目的が無効になりますか?言い換えると、変数のクリアに時間を費やすと、パフォーマンスの向上は最小限になりますか?私は自分自身にプールを教えようとしているので、どんな批判やアドバイスも大歓迎です!