Supongamos que tengo un puntero de tipo char * a cadena Unicode, y sé que la longitud:Marshal.PtrToStringUni() vs new String()?
char* _unmanagedStr;
int _unmanagedStrLength;
y tengo 2 maneras de convertir a cadena NET:
Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength);
y
new string(_unmanagedStr, 0, _unmanagedStrLength);
En mis pruebas, tanto las llamadas me da exactamente el mismo resultado, pero el new string()
es como 1.8x veces más rápido que Marshal.PtrToStringUni()
.
¿Por qué es esa diferencia de rendimiento? ¿Hay alguna otra diferencia funcional entre los dos?