문제

한 두 가지가 아닌 포인터의 유형 char*유니코드 문자열이며,나는 길이:

char* _unmanagedStr;
int _unmanagedStrLength;

가 2 가지 방법으로 변환합니다.NET 문자열:

Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength);

new string(_unmanagedStr, 0, _unmanagedStrLength);

에서 테스트를 모두 통화를 나에게 정확히 동일한 결과하지만, new string() 은 다음과 같 1.8x 배 이상 빠른 Marshal.PtrToStringUni().

그 이유는 성과 차이가 있나요?은 거기에 어떤 다른 기능적인 사이에 차이가 있으니까요.

도움이 되었습니까?

해결책

에서 판단할 수 있는 소스 코드(회전자)시스템.문자열(Char*)생성자를 사용하여 크게 최적화된 코드의 경로를 통해 CtorCharPtr(),할당 문자열과 함께 FastAllocateString().보안관.PtrToStringUni()다음과 같이 완전히 다른 코드의 경로,그것은 C++로 작성하고 보이는 것 복사열,두 번의 혜택 없이"빨리 할당자".

분명히지 않는 동일한 프로그래머에서 일했다.거의 확실하지 않도 같은 팀 이후 코드에 맞는 다양한 프로그래밍 모델이다.가장 가까이에서 관리자는 일반적인 아마이었는 네 가지 수준이다.

는 방법을 확실하지 않는 것이 도움이 될 사용하여 빠른 하나입니다.사고가 생성과 비슷한 종류의 예외는 응용 프로그램을 시작합니다.

다른 팁

두 번째는 아 CLS 준수하고,필요한 안전하지 않은 코드고 있는 동작을 예측할 수없는 이유는 아마도 그것은 빠릅니다.또한 필요 포인터를 관리되지 않는 주소 또는 쓰레기 수집할 수 있 재배치하는 leades 더 복잡 코드입니다.지 않는 한 당신이 결정하는 것이 병목 현상을 응용 프로그램에 대한 당신은 아마 사용하고 싶 PtrToStringUni 기능입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top