这不是我所说的一个好的解决方法,不。它会起作用(假设您确定重入风险,即即使通过意外事件/回调/等也不会调用自身) - 但是......
在我看来,它是有状态的,让它成为一个实例:
private int[] register = new int[4];
public bool CoolMethod(int[] largearray) {...}
并简单地为每个上下文使用不同的实例WheverTheTypeIs
,即实例充当上下文。如果您想要每个线程的上下文,只需为每个线程使用不同的实例。这也允许在相同的上下文中继续使用回调、并行、工作者等。请注意,有许多框架不保证单线程(例如 WCF、ASP.NET、WPF),随着 5.0 引入更多面向async
/await
的代码,这种情况只会增加。
如果您深深地依赖于静态方法,则将register
in 作为第二个参数传递也足够了:
public static bool CoolStaticMethod(int[] largearray, int[] register) {...}
如果问题是 4 字节数组的分配:
- 这通常是 GEN-0,收集起来很便宜
- 如果你真的想要,使用
stackalloc
并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];
....
}