Во-первых, я бы переписал его как простой цикл for
и не использовал бы локальную переменную в Паскале, включая переменную с большей областью действия, чем необходимо:
int minY = int.MaxValue;
int maxY = int.MinValue;
for (int sample = firstSample + 1; sample <= lastSample; sample++)
{
int y = _average[sample];
minY = Math.Min(y, minY);
maxY = Math.Max(y, maxY);
}
Это просто для того, чтобы сделать его более привычным и привычным. JIT знает о зацикливании массивов в определенных ситуациях, но я не знаю, поможет ли это в этом случае - он может просто проверить firstSample >= -1 && lastSample < _average.length
, а затем исключить проверки границ, но я не знаю если это так. Теперь сэмплы, которые уже находятся в текущем минимальном / максимальном диапазоне, не нуждаются в побочных эффектах, поэтому давайте избавимся от назначений в этом случае:
for (int sample = firstSample + 1; sample <= lastSample; sample++)
{
int y = _average[sample];
if (y < minY)
{
minY = y;
}
if (y > maxY)
{
maxY = y;
}
}
Я не знаю, поможет это или нет - и я подозреваю, что это не поможет, но, возможно, стоит попробовать ...
(Как сказал другой ответ, это очень простая операция для параллелизации - она должна повысить скорость почти линейно с подсчетом процессоров, то есть 2 процессора ~ = в два раза быстрее и т. Д., За исключением пропусков кэша и т.