I have three implementations of the B&W image processing core now. One of them uses GEGL, another one is written in C# and the third one in C. On my Core 2 Duo, utilizing only one core, GEGL can process 1.2 megapixels per second, and that’s without dodging and burning. The C# implementation does 6 MP/s, including dodging and burning (8.3 MP/s without), while the C implementation does 36 MP/s, including dodging and burning (59 MP/s without). I haven’t put any effort into optimizing either the C or C# implementations. Given that my C# experience is still rather limited I guess that there’s considerable room for optimization, there. Still, I expected more. If anybody knows to make this C# program faster, I’d be thankful for any hints.
So I guess I’ll be using my C implementation for now and later add the C# one as a fall-back for better portability.