【发布时间】:2011-08-11 22:51:39
【问题描述】:
首先,我在使用 CE6.5 的移动设备上运行它。我有一个整数数据的 ArrayList,出于绘图目的,我想按顺序将其转换为列表中的数字,并将 int 值转换为点的 x 和 y 值。将所有这些点放入一个点数组中,然后使用 bufferedGraphics.DrawLines 将其绘制到表单上。我有一种方法似乎工作得很快,但不确定这是否是最好的方法。对此代码有何建议或改进?
哦,是的,dataList 通常约为 450 或更多,具体取决于屏幕大小和旋转。
public Point[] toPointArray(int w, int h) {
Point[] p;
int val;
p = new Point[dataList.Count];
for (int i = 0; i < dataList.Count; i++) {
val = (int)dataList[i];
if (i < p.Length)
p[i] = new Point(i, h - (val * h) / range + (min * h) / range);
}
return p;
}
我的一些数据正在以每秒 256 次的速度更新 dataList,因此存在覆盖问题,但到目前为止,即使在这些速度下,这似乎也有效。
以下是当前速度的一些速度值,时间以秒为单位:
Time to complete 0.000588
Time to complete 0.0005886154
Time to complete 0.0005846154
Time to complete 0.0005870769
Time to complete 0.0005830769
Time to complete 0.0005806154
Time to complete 0.0005981539
Time to complete 0.0007206154
Time to complete 0.0005836923
Time to complete 0.001039077
从下面的答案中得到建议后,我的代码现在看起来像这样,平均执行时间为 0.00047 秒。 dataList 是一个全局的,现在是一个 List 而不是 ArrayList,(int) 转换占用了原始处理时间的四分之一。
List<int> dataList = new List<int>();
public Point[] toPointArray(int w, int h) {
Point[] p = new Point[dataList.Count];
for (int i = 0; i < dataList.Count; i++) {
p[i] = new Point(i, h - (dataList[i] * h) / range + (min * h) / range);
}
return p;
}
【问题讨论】:
-
您可以删除
if,它会稍微提高性能。
标签: c# mobile compact-framework arraylist point