您好,我有福彩12选5走势图程序很忙于访问数组,所以我一直在尝试优化速度。这对于整个程序要进行大量矩阵操作的高度迭代非常重要。我希望对下面的代码提出任何批评,或者希望进一步提出建议以进一步提高它的速度。
当前的运行时间(在释放模式下)分别以ms为单位,相对时间差相对恒定,此刻,选项4看起来可能是最好的,这表示速度比选项2显着提高,而选项2是当前的方法节目。在我更改整个数组之前,是否有任何明显的改进或更好的方法,或者下面的代码有任何问题,这些问题可能会带来奇怪的结果?
Ms1 128
Ms2 29
Ms3 228
Ms4 7
当前的运行时间(在释放模式下)分别以ms为单位,相对时间差相对恒定,此刻,选项4看起来可能是最好的,这表示速度比选项2显着提高,而选项2是当前的方法节目。在我更改整个数组之前,是否有任何明显的改进或更好的方法,或者下面的代码有任何问题,这些问题可能会带来奇怪的结果?
Ms1 128
Ms2 29
Ms3 228
Ms4 7
阵列访问速度测试:
[TestMethod]
[MethodImpl(MethodImplOptions.NoInlining)]
public unsafe void TestDoubleDoubleArrayWithPts()
{
double[,] Array = new double[10000,1000];
var watch = Stopwatch.StartNew();
int UpperBound0 = Array.GetUpperBound(0);
int UpperBound1 = Array.GetUpperBound(1);
watch.Restart();
for (int i = 0; i < Array.GetUpperBound(0); i++)
for (int y = 0; y < Array.GetUpperBound(1); y++)
Array[i,y] = 10D * 10D;
var elapsedMs1 = watch.ElapsedMilliseconds;
watch.Restart();
for (int i = 0; i < UpperBound0; i++)
for (int y = 0; y < UpperBound1; y++)
Array[i, y] = 10D * 10D;
var elapsedMs2 = watch.ElapsedMilliseconds;
watch.Restart();
fixed (double* ptr = Array)
{
for (int i = 0; i < Array.GetUpperBound(0); i++)
for (int y = 0; y < Array.GetUpperBound(1); y++)
*(ptr + i * Array.GetUpperBound(1) + y) = 10D * 10D;
}
var elapsedMs3 = watch.ElapsedMilliseconds;
watch.Restart();
fixed (double* ptr = Array)
{
for (int i = 0; i < UpperBound0; i++)
for (int y = 0; y < UpperBound1; y++)
*(ptr + i*UpperBound1 + y) = 10D * 10D;
}
var elapsedMs4 = watch.ElapsedMilliseconds;
System.Windows.Forms.MessageBox.Show(elapsedMs1.ToString() + " " + elapsedMs2.ToString() + " " + elapsedMs3.ToString() + " " + elapsedMs4.ToString());
}