Предположим, у меня есть указатель типа char * на строку Unicode, и я знаю длину:
char* _unmanagedStr;
int _unmanagedStrLength;
и у меня есть 2 способа преобразовать его в строку .NET:
Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength);
и
new string(_unmanagedStr, 0, _unmanagedStrLength);
В моих тестах оба вызова дают мне одинаковый результат, но new string()
примерно в 1,8 раза быстрее, чем Marshal.PtrToStringUni()
.
Почему эта разница в производительности?
Есть ли другое функциональное различие между ними?