[Mono-osx] GDI+ OSX performance

Alex Shulgin alexander.shulgin at yessoftware.com
Wed Aug 19 08:11:18 EDT 2009

LKeene wrote:
> Hi Alex,
> it's in response to an earlier thread I started wherein I was getting very
> poor performance. Someone suggested it was due to Graphics object
> allocations being a bottleneck:
> http://www.nabble.com/Horrible-performance-on-Mac%2C-need-advice.-td24507897.html
> Any thoughts on the matter? I'm soon going to tackle this performance issue
> full-force and I'd very much like to get some ideas of where (in general) to
> start.

I hope you are not trying to say that the code you presented in that 
mail[1] is executed in the tight loop.  Otherwise it's strange to expect 
it to perform any good.

handle = GCHandle.Alloc(Channel1BitmapBytes, GCHandleType.Pinned); // 
Pin the array.
IntPtr channel1PTR = 
Marshal.UnsafeAddrOfPinnedArrayElement(Channel1BitmapBytes, 0);
Channel1Bitmap  = new Bitmap(this.CanvasWidth, this.CanvasHeight, 
stride, myPixelFormat, channel1PTR);

// ...later on (in Paint event handler for example)...
Graphics grafix = Graphics.FromImage(Channel1Bitmap);

 > "Channel1BitmapBytes" is a declared globally (within the context of
 > "this") and, because the array is pinned, I can write to it in
 > multi-threaded fashion.

I fail to see how pinning the array helps in multi-threaded access.  Do 
you use any synchronization primitives?

Also, did you try profiling?

Kind regards,

[1] http://go-mono.com/forums/#nabble-p24577325

> Alexander Shulgin wrote:
>> LKeene wrote:
>>> Hello all, I'm revisiting an old issue. Has anyone seen (big) performance
>>> issues with Mono + OSX regarding the use of:
>>> Graphics grafix = Graphics.FromImage(SomeBitmap);  ?
>> No.  Why?
>> --
>> Alex

More information about the Mono-osx mailing list