Angenommen, ich habe einen Zeiger vom Typ char * zu Unicode-String, und ich weiß, die Länge:Marshal.PtrToStringUni() vs neue String()?
char* _unmanagedStr;
int _unmanagedStrLength;
und ich habe 2 Möglichkeiten, es zu .NET-String zu konvertieren:
Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength);
und
new string(_unmanagedStr, 0, _unmanagedStrLength);
In meinen Tests, geben beiden Anrufe mir genau das gleiche Ergebnis, aber die new string()
ist wie 1.8x mal schneller als Marshal.PtrToStringUni()
.
Warum ist dieser Leistungsunterschied? Gibt es einen weiteren funktionalen Unterschied zwischen den beiden?