我正在研究一種採用分配的對象併爲以後再分配它的分配算法。然而,回收對象的問題之一是,例如:使用後清理對象變量(pooling)c#
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);
上面的代碼將利用現有的分配,並保存它,這樣我就沒有分配任何額外的RAM的情況下,我是有另一個someObject。然而,下面創建一個問題:
someObject obj = pool.alloc(); //gives me the above allocation
obj.otherVariable = "bar";
obj.dump();
結果,我會得到以下結果:
someVariable = foo
otherVariable = bar
上述方法產生的問題。如果出於某種原因(或其他人)出於某種原因(而不是某個變量)在某個對象內部使用某種變量,那麼舊值可能會導致不必要的行爲。我探索了一下,看看是否有某種方法可以再次調用默認構造函數(壞主意),並且C#(謝天謝地)似乎不允許你這麼做。但是,我想知道是否有某種方法可以使用反射來做到這一點?另外,清除對象中的變量是否會破壞避免malloc(新)的目的?換句話說,如果我花時間清理變量,性能增益會變得最小?我試圖教我自己,所以任何批評和建議非常感謝!
你有證據表明你需要這個池*嗎? –
你可能不想這樣做。如果一個變量可以被輕易地重用,那麼編譯器/ JITter很可能會在你不知道的情況下做到這一點,如果不是的話,它可能會更加昂貴,並且更有可能不工作(並且也給程序員帶來更高的負擔告訴你的應用何時完成每個項目)。 – Servy