2015-12-24 4 views
6

リストがあり、その配列をプロパティに割り当てる必要があります。ヒープ割り当てのないリストから配列を取得する

public void BuildMesh(List<Vector3> list){ 
    mesh.vertices=list.ToArray(); 
} 

問題:

  • プロジェクトはゲームであり、それはリストの内部配列の横に新しい配列を作成しててToArray()のデフォルトの実装はオプションではありませんので、ガベージコレクションの非常に厳しいです。
  • メッシュオブジェクトは閉じたソースAPIからのもので、verticesプロパティはVector3 []なので、ポインタを割り当てることはできません。

ヒープ割り当てを防止するオプションはありますか?

EDIT:これはIList<Vector3>を使用することはできません重複

ではありません。メッシュは閉じたソースAPIから来ており、Vector3 []が必要なので、IList<Vector3>を割り当てることはできません。

+3

[コピーなしでにリストをコピーする](http://stackoverflow.com/questions/4972951/listt-to-t-without-copying) –

+1

@VadimMartynovこれは別の質問です。メッシュは閉じたソースAPIから来ており、Vector3 []が必要なので、IList を割り当てることはできません。 –

+0

固定サイズのオブジェクトがある場合は、単にオブジェクトを破棄しないでください。代わりに、単にオブジェクトを未使用とマークします。プログラムの先頭にオブジェクトの固定配列を作成します。次に、オブジェクトを作成および廃棄する代わりに、使用済みまたは未使用のオブジェクトをマークします。ガベージコレクションは不要です。 – jdweng

答えて

2

あなたはUnityを使用していると思います。私が正しければ、にはList<Vector3>を受け入れてください。

+0

はい、動作します。私はまた、問題の一般的な解決法を見つけるのに不思議です。 –

+1

List の内部配列がCountより大きい可能性があるので、これは不可能だと思います。 64個の頂点のように特定の数の頂点が頻繁に頻繁に使用されている場合、この配列を再利用してヒープ割り当てを防止することができます。 –

+0

SetverticesはゼロGC割り当てで完全に機能します。だから、私の問題は本質的にこの問題に解決され、私はあなたの答えを+1しました。この質問は一般的なC#の問題としても有効です。単一性以外のAPIの状況に直面すればどうなるでしょうか? –

関連する問題