Tôi đã tự hỏi nếu có bất kỳ cách nào để thay đổi hành vi của trình biên dịch .NET JIT, bằng cách chỉ định một tùy chọn để tối ưu hóa sâu hơn. Nếu không, sẽ tốt hơn nếu nó có thể thực hiện một số loại tối ưu hóa hướng dẫn profile, nếu nó chưa được.Có cách nào để thay đổi trình biên dịch .NET JIT để ưu tiên hiệu năng qua thời gian biên dịch không?
Có cách nào để thay đổi trình biên dịch .NET JIT để ưu tiên hiệu năng qua thời gian biên dịch không?
Trả lời
Cài đặt này được thiết lập khi bạn biên dịch hội đồng của mình. Có hai loại tối ưu:
- tối ưu hóa IL
- JIT Native Code chất lượng.
Cài đặt mặc định là này
/optimize- /debug-
Điều này có nghĩa unoptimized IL, và tối ưu hóa mã nguồn gốc.
/optimize /debug(+/full/pdbonly)
Điều này có nghĩa là chưa được tối ưu hóa IL và mã gốc không được tối ưu hóa (cài đặt gỡ lỗi tốt nhất).
Cuối cùng, để có được hiệu suất nhanh nhất:
/optimize+ /debug(-/+/full/pdbonly)
này tạo ra được tối ưu hóa IL và tối ưu hóa mã nguồn gốc.
Khi sản xuất IL chưa được tối ưu hóa, trình biên dịch sẽ chèn hướng dẫn NOP trên mã. Điều này làm cho mã dễ dàng hơn để gỡ lỗi bằng cách cho phép các điểm ngắt được đặt trên các hướng dẫn luồng điều khiển như, trong khi, nếu khác, hãy thử, bắt, v.v.
CLR thực hiện tốt công việc tối ưu hóa mã bất kể. Khi một phương thức được JIT'ed, con trỏ trên một cuộc gọi hoặc một lệnh callvirt được trỏ trực tiếp đến mã gốc.
Ngoài ra, CLR sẽ tận dụng mọi thủ thuật kiến trúc có sẵn khi JIT'ing mã của bạn. Điều này có nghĩa là một assembly chạy qua JIT sẽ chạy nhanh hơn một assembly được biên dịch trước bằng cách sử dụng Ngen (mặc dù thời gian khởi động hơi chậm), vì NGen sẽ biên dịch cho tất cả các nền tảng và không tận dụng mọi thủ thuật.
- 1. Phát hiện JIT tại thời gian biên dịch trong MonoTouch
- 2. Ngôn ngữ lập trình nào có trình biên dịch JIT?
- 3. C++ Biên dịch chuỗi thời gian biên dịch
- 4. Cách thay đổi trình biên dịch tomcat
- 5. Hiệu suất biên dịch mã bằng biên dịch biên dịch
- 6. Ở mức độ nào trình biên dịch C# hoặc JIT tối ưu hóa mã ứng dụng?
- 7. Tại sao .net sử dụng trình biên dịch JIT thay vì chỉ biên dịch mã một lần trên máy đích?
- 8. Có trình biên dịch Ruby .NET không?
- 9. Trình biên dịch/trình biên dịch/trình biên dịch C++
- 10. Trình biên dịch có trình biên dịch không?
- 11. Khi nào Java nhận được trình biên dịch JIT?
- 12. Tối ưu hóa trình biên dịch Erlang
- 13. Viết một trình biên dịch JIT trong assembly
- 14. Cách tính thời gian biên dịch gcc?
- 15. Trình biên dịch C/C++ có tối ưu hóa trên các đơn vị biên dịch không?
- 16. Trình biên dịch Java HotSpot JIT nào đang chạy?
- 17. Cách tắt trình biên dịch tối ưu hóa của V8
- 18. Buộc trình biên dịch .NET JIT tạo mã tối ưu nhất trong khi khởi động ứng dụng
- 19. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 20. Hằng số thời gian biên dịch Clojure
- 21. Làm cách nào để viết mã (kiểm tra) sẽ không được tối ưu hóa bởi trình biên dịch/JIT?
- 22. Sự khác biệt giữa Trình biên dịch Chỉ trong thời gian và Phiên dịch là gì?
- 23. Loại thời gian biên dịch không có RTTI với GCC
- 24. Biên dịch "strlen()" có hiệu quả không?
- 25. Sửa đổi .Net Exe biên dịch
- 26. Phát hiện phiên bản trình biên dịch trong thời gian biên dịch
- 27. Những nhược điểm của việc biên dịch JIT là gì?
- 28. Tối ưu hóa hiệu suất thời gian biên dịch bởi bộ nhớ đệm metafunctions
- 29. Trình thông dịch Python 3 có tính năng JIT không?
- 30. Nhận thời gian biên dịch JAR
+1 Tốt. Trường hợp chính xác trong IDE bạn thiết lập các giá trị này? – Trap
Trong VS2010 (và các phiên bản cũ hơn IIRC), hãy bật cài đặt dự án "Tối ưu hóa mã", được bật theo mặc định trong cấu hình Phát hành. (Điều này tương đương với '/ optimization', tương đương với'/optimization + '.) Lưu ý rằng trình tối ưu hóa là [xa hoàn hảo] (http://stackoverflow.com/questions/10369421/why-does-adding-local -variables-make-net-code-slow). –
Không có thủ thuật cho mỗi máy, AFAIK. Tôi đã được thông báo rằng nhóm .NET cảm thấy rằng việc duy trì nhiều phiên bản của trình tối ưu hóa JIT (mà là một con thú VERY phức tạp) là quá tốn kém so với lợi ích tiềm năng. –