[Mono-list] Code optimizations

Robert Jordan robertj at gmx.net
Fri Feb 20 09:30:57 EST 2009

Yoav HaCohen wrote:
> Here is my first idea:
> Suppose we have the following code:
> [DllImport(NATIVE_LIBRARY, CallingConvention = CallingConvention.Cdecl)]
>         private static extern void NativeFoo(int temp, out int cx, out int
> cy);
> public System.Drawing.Point Foo()
> {
> 	int cx, cy;
> 	NativeFoo(int a, out cx, out cy);
> 	return new System.Drawing.Point(cx, cy);
> |

I'm aware that you did not intend to start a discussion
about p/invoke, but I could not resist (1):

You don't want to p/invoke just to get one point out of
the unmanaged world. The managed/unmanaged transition
is too costly for this. Any optimization done by the JIT
after this call would be pointless.

When dealing with (arrays of) Point/Rectangle/Size (and other similar
well known structs), there is a (rather dirty) way to gain speed:

Define Point/Rectangle/Size as structs in the unmanaged
world and pass them by reference back and forth.


(1) that's why designers are using "lorem ipsum" paragraphs for
prototyping ;)

More information about the Mono-list mailing list