I’m trying to optimise the following C# code, which sets bytes to 0x00 or 0xFF based on a threshold.
for (int i = 0; i < veryLargeNumber; i++)
{
data[i] = (byte)(data[i] < threshold ? 0 : 255);
}
Visual Studio’s performance profiler shows that the above code is rather expensive, taking nearly 8 seconds to compute – 98% of my total processing expense. I’m processing just under a thousand items, so that adds up to over two hours.
I think the issue is to do with the ternary conditional operator, since it causes a branch. I’d imagine a pure-math operation of some sort could be significantly faster, since it’s CPU-cache friendly.
Is there a way to optimise this? It’s possible for me to fix the threshold value, if that helps. I’d consider anything above a ~7% performance increase a win, since that’s a whole 10 minutes shaved off the total processing time.
If you are using .NET 4.0 Framework, you could make use of Parallel Library in following link,
http://msdn.microsoft.com/en-us/library/dd460717
In Your case, you must have to verify the threshold, anyway it would take time. So make use of thread or lambda expressions