在某些背景下,我是工程师而不是专业程序员,所以对任何愚蠢的问题表示歉意。我有一个计算量大的程序,我想加快速度。我的理解(来自阅读论坛)是C#针对锯齿状数组进行了优化,但是下面的测试似乎没有说明。如果我做错了,请告诉我,使用托盘对象(可能是任何中等复杂的对象)的测试似乎太快了,代码是否有问题?
我在调试中获得的相对速度为: (注意:我只是意识到时间包括数组感染,但是没关系,数组将在程序中多次清除或重新初始化)。
对象/字段访问0ms
锯齿状阵列访问87ms
普通阵列访问12ms
如果我不算初始化数组,我分别得到0、7和7毫秒。
我在调试中获得的相对速度为: (注意:我只是意识到时间包括数组感染,但是没关系,数组将在程序中多次清除或重新初始化)。
对象/字段访问0ms
锯齿状阵列访问87ms
普通阵列访问12ms
如果我不算初始化数组,我分别得到0、7和7毫秒。
C#:
var watch = Stopwatch.StartNew();
double res=0;
int count = 10000;
Tray tray = column[0][4];
for (int i = 0; i < count; i++)
{
tray = column[0][4];
tray.T = i;
res = tray.T;
}
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
Debug.WriteLine("Column Solution Time1 ms: " + elapsedMs.ToString() + " " + res.ToString());
MessageBox.Show("Object Field" + elapsedMs.ToString());
watch = Stopwatch.StartNew();
double res2 = 0;
int count2 = count;
double[][] tray1 = new double[count2][];
for (int i = 0; i < count2; i++)
tray1 = new double[count2];
for (int i = 0; i < count2; i++)
{
tray1 = i;
res2 = tray1;
}
watch.Stop();
elapsedMs = watch.ElapsedMilliseconds;
Debug.WriteLine("Column Solution Time2 ms: " + elapsedMs.ToString() +" "+ res2.ToString());
MessageBox.Show("Jagged Matix" + elapsedMs.ToString());
watch = Stopwatch.StartNew();
double res3 = 0;
int count3 = count;
double[,] tray3 = new double[count3,count3];
for (int i = 0; i < count3; i++)
{
tray3[i,i] = i;
res3 = tray3[i,i];
}
watch.Stop();
elapsedMs = watch.ElapsedMilliseconds;
Debug.WriteLine("Column Solution Time3 ms: " + elapsedMs.ToString() + " " + res3.ToString());
MessageBox.Show("Matix" + elapsedMs.ToString());
Last edited: