Giả sử tôi có một con trỏ kiểu char * để chuỗi unicode, và tôi biết chiều dài:Marshal.PtrToStringUni() vs new String()?
char* _unmanagedStr;
int _unmanagedStrLength;
và tôi có 2 cách để chuyển nó sang chuỗi NET:
Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength);
và
new string(_unmanagedStr, 0, _unmanagedStrLength);
Trong thử nghiệm của tôi, cả hai cuộc gọi đều cho tôi kết quả tương tự, nhưng new string()
nhanh hơn 1,8 lần so với Marshal.PtrToStringUni()
.
Tại sao hiệu suất đó lại khác biệt? Có khác biệt chức năng nào khác giữa cả hai?