2013-09-06 51 views
5

Tôi đã đọc trong CLR qua C# của Jeffrey Richter rằng String.ToUpperInvariant() nhanh hơn String.ToLowerInvariant(). Ông nói rằng điều này là do FCL sử dụng ToUpperInvariant để chuẩn hóa các chuỗi, vì vậy phương pháp này được tối ưu hóa cực kỳ. Chạy một vài bài kiểm tra nhanh trên máy của tôi, tôi đồng ý rằng ToUpperInvariant() thực sự nhanh hơn một chút.Tại sao ToUpperInvariant() nhanh hơn ToLowerInvariant()?

Câu hỏi của tôi là nếu có ai biết cách chức năng thực sự được tối ưu hóa ở cấp độ kỹ thuật và/hoặc lý do tại sao cùng một tối ưu hóa cũng không được áp dụng cho ToLowerInvariant().


Liên quan đến việc "nhân đôi": Các "sao chép" Câu hỏi đề xuất thực sự không cung cấp một câu trả lời cho câu hỏi của tôi. Tôi hiểu lợi ích của việc sử dụng ToUpperInvariant thay vì ToLowerInvariant, nhưng những gì tôi muốn biết là tại sao/tại sao ToUpperInvariant hoạt động tốt hơn. Điểm này không được giải quyết trong "trùng lặp".

+0

Có vẻ như công việc cho ildasm thân thiện của bạn hoặc trình giải mã ưa thích. – Romoku

+1

http://stackoverflow.com/questions/2801508/what-is-wrong-with-tolowerinvariant – Dennisch

+0

Cả hai 'ToUpperInvariant()' và 'ToLowerInvariant()' kết thúc gọi 'InternalChangeCaseString()', do đó, ma thuật phải là một số tối ưu hóa trong (hoặc trong phương thức được gọi bởi) phương thức đó. –

Trả lời

3

Vì bây giờ nó dễ dàng hơn để read the CLR source which implements InternalChangeCaseString, chúng ta có thể thấy rằng nó chủ yếu gọi xuống hàm Win32 LCMapStringEx. Dường như không có ghi chú hoặc bất kỳ cuộc thảo luận nào về hiệu suất truyền trong số LCMAP_UPPERCASE so với LCMAP_LOWERCASE cho tham số dwMapFlags. Gọi InternalChangeCaseString sử dụng cờ isToUpper, nếu true có thể dẫn đến tối ưu hóa tốt hơn bởi trình biên dịch (hoặc JITter), nhưng khi cuộc gọi đến LCMapStringEx phải thiết lập ap/gọi khung cuộc gọi và cuộc gọi chính nó phải làm việc, tôi không chắc chắn rất nhiều thời gian được lưu ở đó.

Có lẽ đề xuất là một sự trì hoãn từ một số triển khai khác, nhưng tôi không thể thấy bất kỳ điều gì có thể mang lại lợi thế tốc độ đáng kể theo cách này hay cách khác.

Các vấn đề liên quan