[Mono-list] Fast Passing Strings to Interop without Marshaling

Chris Howie cdhowie at gmail.com
Mon Nov 3 13:03:45 EST 2008


On Mon, Nov 3, 2008 at 1:00 PM, Jonathan Pryor <jonpryor at vt.edu> wrote:
> On Mon, 2008-11-03 at 09:41 -0800, Bradford Stephens wrote:
>> I believe you still have to use the Marshaling in order to get an IntPtr.
>
> Yes, but marshaling an IntPtr doesn't require copying the entire buffer.
> Marshaling as a System.String *does* require copying the entire buffer.
>
> 4 bytes is clearly less than 100kB+. :-)
>
> So unless you really need a System.String, you could instead use IntPtr
> and use the System.Runtime.InteropServices.Marshal methods to interact
> with the unmanaged string, or you could use unsafe code and cast the
> IntPtr to a byte* for memory manipulation...

Of course, you'll have to represent the string as a short[] on the
unmanaged side.  If you want to convert string -> char[] then you're
going to have to copy the entire string character-by-character at some
point.

-- 
Chris Howie
http://www.chrishowie.com
http://en.wikipedia.org/wiki/User:Crazycomputers


More information about the Mono-list mailing list