作者:你是我最终的荒唐 | 来源:互联网 | 2022-11-27 19:46
我有这个:
var data = new byte[100,100,1];
//data is populated from external source
for (var h = 0; h <100 ; h++)
{
for (var w = 0; w <100; w++)
{
if (Data[h, w, 0] > 10)
{
Data[h, w, 0] = 255;
}
}
}
而我只是说如果值大于10然后将其更改为255.
但是,它很慢.
有没有更快的方法来做到这一点?
1> AAAbbbCCCddd..:
你也可以将它unsafe
和指针混合使用.但是,你需要跳过几个箍.它应该在发布模式下使用指针给你一点性能
// p is because you cant used fixed in a lambda
public static unsafe byte* p;
// AggressiveInlining to compile in line if possible
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void DoOp(int i)
{
if (*(p + i) > 10) *(p + i) = 255;
}
public static unsafe void Main()
{
int x = 10, y = 10, z = 1;
var data = new byte[x, y, z];
fixed (byte* pbytes = data)
{
p = pbytes;
Parallel.For(0, x * y,
new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount},
DoOp);
}
}