Ну у меня есть эта функция для сравнения красный, синий, зеленый и альфа пикселей в сравнении изображений для цикла сравнения двух изображенийсравнение Байт использует так много процессорного
Код:
var o = 255 - c1.A;
var t = tolerance < o ? o : tolerance;
var b = AreSimiliar(ref c1.B, ref c2.B, ref t);
var g = AreSimiliar(ref c1.G, ref c2.G, ref t);
var r = AreSimiliar(ref c1.R, ref c2.R, ref t);
if (b && g && r) continue;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static bool AreSimiliar(ref byte v1, ref byte v2, ref double tolerance)
{
var z = v1 - v2;
var t = z > 0 ? z : -z;
return t <= tolerance;
}
Проблема заключается в том он использует так много CPU, хотя внешний код не используется, и тестирование сузило его до того кода, который вызывает нагрузку.
I сомневаюсь, что будет полезно оптимизировать только этот код. Вероятно, любая реалистичная оптимизация потребует тщательного изучения окружающего кода. –
не используйте ref на байте, если вы не хотите их изменить ... ваша передача указателя 32-битного или 64-битного вместо 8 бит ... на самом деле удалить все ref из этого метода – Fredou
Кроме того, 'tolerance' может быть int так как дельта будет также. –