[英]Fast unsafe access for two dimension array
我有一个巨大的二维数组。 我需要从中获取元素,但是我有一个问题-它的运行速度极慢(我认为从编译器检查索引时出现问题)。 我如何不安全地获取数组元素?
private byte[][] MY_TASTE_ARRAY;
for (int d = 0; d < MANY_TIMES; d++)
{
int a = MY_TASTE_ARRAY[first_index][second_index];
MakeSomethingWitha(a);
}
数组访问并不慢,我尝试了该程序,比较了直接将一堆连续重复的数字从0到255相加或将它们放入锯齿数组或矩阵中的时间:
const int N = 10000;
var jagged = new byte[ N ][];
var matrix = new byte[ N, N ];
var count = (byte)0;
for (var i=0; i< N; i++ )
{
jagged[ i ] = new byte[ N ];
for ( var j = 0; j < N; j++ )
{
jagged[ i ][ j ] = count;
matrix[ i, j ] = count;
count = count == 255 ?
(byte) 0 :
(byte) ( count + 1 );
}
}
var watch = new Stopwatch();
watch.Start();
var total = 0;
for ( var i = 0; i < N; i++ )
{
for ( var j = 0; j < N; j++ )
{
total += jagged[ i ][ j ];
}
}
watch.Stop();
Console.WriteLine( "Total with jagged array: {0} in {1} ms", total, watch.ElapsedMilliseconds );
watch.Restart();
total = 0;
count = (byte)0;
for ( var i = 0; i < N; i++ )
{
for ( var j = 0; j < N; j++ )
{
total += matrix[ i, j ];
}
}
watch.Stop();
Console.WriteLine( "Total with matrix: {0} in {1} ms", total, watch.ElapsedMilliseconds );
watch.Restart();
total = 0;
count = (byte)0;
for ( var i = 0; i < N; i++ )
{
for ( var j = 0; j < N; j++ )
{
total += count;
count = count == 255 ?
(byte)0 :
(byte)( count + 1 );
}
}
watch.Stop();
Console.WriteLine( "Total without array: {0} in {1} ms", total, watch.ElapsedMilliseconds );
使用锯齿形数组的结果为497 ms,使用矩阵的结果为624 ms,直接计算数字为486 ms。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.