`IntPtr` is a `struct` and so by default is passed by value, this might be expensive (as new object is created every time) and so we better pass it by reference when new object is not mandatory. For example I wrote such code (please ignore hardcoded "magic numbers"):

```
    public static DateTime IntPtrToDateTime(ref IntPtr value, int offset)
    {
        short year = Marshal.ReadInt16(value, offset);
        byte month = Marshal.ReadByte(value, offset + 2);
        byte day = Marshal.ReadByte(value, offset + 3);
        byte hour = Marshal.ReadByte(value, offset + 4);
        byte minute = Marshal.ReadByte(value, offset + 5);
        byte second = Marshal.ReadByte(value, offset + 6);
        short msec = Marshal.ReadInt16(value, offset + 8);
        return new DateTime(year, month, day, hour, minute, second, msec);
    }

```

Works fine, but I'm doubt if I really should pass IntPtr by reference? I guess `IntPtr` struct is very "light" and likely very easy to create.

Also in `Marshal` class in .NET framework passes `IntPtr` by value, for example [Marshal.ReadInt64](http://msdn.microsoft.com/en-us/library/8assa3zs.aspx) I guess `Marshal` class is designed to be the lowest-possible latency, but why `IntPtr` is not passed by reference then?

* What would be faster - pass IntPtr by value or by reference?
* If passing by reference is faster then why `Marshal` class pass `IntPtr` by value?