2015-12-20 9 views
5

Giả sử tôi có mã cần được tối ưu hóa nhưng dễ dàng gỡ lỗi cùng một lúc. Do đó, tôi sẽ gán một chuỗi cho mọi giá trị tôi sử dụng. Chuỗi có gây ra hiệu suất chính hay nó được biến thành một tham chiếu không đổi thu được từ chuỗi .Internet trong quá trình biên dịch JIT/AOT, do đó chuyển thành một lệnh đơn giản?CIL ldstr có được thay thế bằng tham chiếu không đổi đối với chuỗi.Intern trong quá trình biên dịch JIT/AOT không?

Ví dụ:

Trong IL nó sẽ là ldstr "gazilion lines".

Có phải trong quá trình biên soạn JIT/AOT được biến thành một cái gì đó như ldsflda string.InternCache.ID_0000647516166const string ID_0000647516166 = "gazilion lines"; được thêm vào string.InternCache?

Có, tôi về mặt lý thuyết có thể xem xét https://github.com/mono/mono nhưng tôi không biết cách tìm.

Có, tôi đang trộn CIL, C# và bất kỳ CIL nào được biên dịch vào, nhưng bạn có ý tưởng.

Có phải ldstr được đảm bảo là O(1)?

Có "chi tiết triển khai" của CLR nhưng sẽ có ý nghĩa nếu nó được tối ưu hóa theo cách này.

+2

Câu trả lời dài: có. Trở thành một MOV reg duy nhất, hướng dẫn imm tại thời gian chạy, hãy chắc chắn để sử dụng một trình gỡ lỗi có thể cho bạn thấy tháo gỡ, do đó bạn không cần phải băn khoăn về cách mã thông báo siêu dữ liệu và jitter hoạt động. –

Trả lời

1

Câu trả lời dài: có. Trở thành một MOV reg duy nhất, hướng dẫn thực tế trong thời gian chạy, hãy chắc chắn sử dụng một trình gỡ lỗi có thể hiển thị cho bạn tháo gỡ để bạn không phải băn khoăn về cách mã thông báo siêu dữ liệu và công cụ jitter hoạt động. - Hans Passant

+0

Vui lòng mở rộng theo/cho từng câu hỏi. – user2864740

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