¿Se puede optimizar este código?

Tengo un código de procesamiento de imágenes que recorre 2 conjuntos de bytes multidimensionales (del mismo tamaño). Toma un valor de la matriz fuente, realiza un cálculo y luego almacena el resultado en otra matriz.

int xSize = ResultImageData.GetLength(0);
int ySize = ResultImageData.GetLength(1);

for (int x = 0; x < xSize; x++)
{                
   for (int y = 0; y < ySize; y++) 
   {                                                
      ResultImageData[x, y] = (byte)((CurrentImageData[x, y] * AlphaValue) +
                                    (AlphaImageData[x, y] * OneMinusAlphaValue));
   }
}

El ciclo actualmente toma ~ 11 ms, lo que supongo se debe principalmente al acceso a los valores de los conjuntos de bytes, ya que el cálculo es bastante simple (2 multiplicaciones y 1 suma).

¿Hay algo que pueda hacer para acelerar esto? Es una parte crítica del tiempo de mi programa y este código se llama 80-100 veces por segundo, por lo que cualquier ganancia de velocidad, por pequeña que sea, hará la diferencia. También en este momento xSize = 768 y ySize = 576, pero esto aumentará en el futuro.

Actualiza: Gracias a Guffa (vea la respuesta a continuación), el siguiente código me ahorra de 4 a 5 ms por ciclo. Aunque esinsegur código.

int size = ResultImageData.Length;
int counter = 0;
unsafe
{
    fixed (byte* r = ResultImageData, c = CurrentImageData, a = AlphaImageData)
    {
        while (size > 0)
        {
            *(r + counter) = (byte)(*(c + counter) * AlphaValue + 
                                    *(a + counter) * OneMinusAlphaValue);
            counter++;
            size--;
        }
    }
}

Respuestas a la pregunta(14)

Su respuesta a la pregunta