Прежде всего, я запускаю это на мобильном устройстве с использованием CE6.5. У меня есть ArrayList данных, которые являются целочисленными, и для целей построения графиков я хочу преобразовать их по порядку, в число, в котором оно находится в списке, и значение int в значения x и y для Point. Поместите все эти точки в массив точек, затем используйте bufferedGraphics.DrawLines, чтобы нарисовать это на форме. У меня есть способ сделать это, который работает довольно быстро, но я не уверен, что это лучший способ. Любые предложения или улучшения этого кода?
Да, список данных обычно составляет около 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 раз в секунду, поэтому проблемы с перезаписью существуют, но пока это работает даже на этих скоростях.
Вот некоторые значения скорости относительно того, как быстро это происходит, время в секундах:
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 - это глобальный объект, который теперь является списком, а не 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;
}