Я профилирую свою простую 2D игру XNA. Я обнаружил, что 4% всего времени выполнения занято простой операцией сложения двух цветов, один из которых умножается сначала на число с плавающей запятой.
Мне нужно вызывать этот метод 2000 раз за кадр (для каждой плитки на карте), что дало мне 120000 раз в секунду для 60 кадров в секунду в XNA. Даже минимальное усиление одного звонка дало бы огромное влияние на скорость. Все же я просто не знаю, как я могу сделать это более эффективным
private void DoColorCalcs(float factor, Color color)
{
int mul = (int)Math.Max(Math.Min(factor * 255.0, 255.0), 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * mul / 255), 255),
(byte)Math.Min(tile.Color.G + (color.G * mul / 255), 255),
(byte)Math.Min(tile.Color.B + (color.B * mul / 255), 255));
}
РЕДАКТИРОВАТЬ: В соответствии с предложением Майкла Стум:
private void DoColorCalcs(float factor, Color color)
{
factor= (float)Math.Max(factor, 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * factor), 255),
(byte)Math.Min(tile.Color.G + (color.G * factor), 255),
(byte)Math.Min(tile.Color.B + (color.B * factor), 255));
}
Это использование времени уменьшено с 4% до 2,5%