それは私が良い回避策と呼ぶものではありません。それは機能します(再入可能性のリスクについて確信がある場合、つまり、偶発的なイベント/コールバック/などを介しても、それ自体を呼び出さないと仮定します)-しかし...
私の意見では、それはステートフルで、インスタンスにします:
private int[] register = new int[4];
public bool CoolMethod(int[] largearray) {...}
WheverTheTypeIs
コンテキストごとに異なるインスタンスを使用するだけです。つまり、インスタンスがコンテキストとして機能します。スレッドごとにコンテキストが必要な場合は、スレッドごとに異なるインスタンスを使用してください。これにより、コールバック、並列処理、ワーカーなどを使用して、同じコンテキストで継続することもできます。単一のスレッド (WCF、ASP.NET、WPF など) を保証しないフレームワークが多数あることに注意してください。これは、5.0 でより多くのasync
/await
指向のコードが導入されるにつれて増加するだけです。
静的メソッドに深く結びついている場合は、register
in を 2 番目のパラメーターとして渡すだけでも十分です。
public static bool CoolStaticMethod(int[] largearray, int[] register) {...}
問題が 4 バイト配列の割り当てである場合:
- それは通常GEN-0になるので、収集するのが安い
- 本当に必要な場合は、
stackalloc
andを使用しunsafe
て割り当てを回避します
「2」の例:
public static unsafe bool CoolStaticMethod(int[] largearray)
{
// not an array! this is raw data on the stack; DO NOT GO OUT OF BOUNDS!
int* register = stackalloc int[4];
register[0] = 1;
register[1] = largearray[3];
largearray[2] = register[0];
....
}