Có cách nào tôi có thể kiểm tra (không bắt buộc) nếu một phương thức hoặc thuộc tính getter được đưa vào trong bản xây dựng phát hành không?Phương pháp kiểm tra Inlining trong C#
Trả lời
Chúng không bao giờ được trình biên dịch C# bao hàm. Chỉ có các trường const
.
Bạn có thể xem xét tối ưu hóa trình biên dịch C# here.
Bạn thể chắc chắn rằng một phương pháp hay tài sản accessor là bao giờ inlined với thuộc tính này áp dụng cho nó:
[MethodImpl(MethodImplOptions.NoInlining)]
Không - vì nó không xảy ra ở thời gian xây dựng; nó xảy ra vào thời điểm JIT. Trình biên dịch C# sẽ không thực hiện bất kỳ nội tuyến nào; nó lên đến CLR rằng mã kết thúc lên chạy.
Bạn có thể khám phá điều này bằng cách sử dụng dây cáp với tất cả các tối ưu hóa JIT được bật, nhưng bạn sẽ cần phải tìm hiểu mã lắp ráp. Tôi không biết cách nào phát hiện ra điều này trong mã. (Có thể bạn có thể làm như vậy với API trình gỡ lỗi, mặc dù điều đó cũng có thể vô hiệu hóa một số nội tuyến để bắt đầu.)
Bạn sẽ phải xem mã máy. Đặt một điểm ngắt trên cuộc gọi phương thức và khi nó chạm, nhấp chuột phải và chọn Chuyển đến hội đồng. Nếu bạn không nhìn thấy câu lệnh CALL thì nó đã được inlined. Bạn sẽ phải tăng tốc một chút về việc đọc mã máy để thực sự chắc chắn, bạn có thể thấy một cuộc gọi trong phương thức nội tuyến.
Để thực hiện điều này chính xác, bạn sẽ phải sử dụng Công cụ + Tùy chọn, Gỡ lỗi, Chung, bỏ chọn "Suppress JIT optimization on load module". Mà đảm bảo jitter cư xử như nó không có trình gỡ lỗi, phương pháp sẽ không được inlined khi tối ưu hóa được tắt.
Thêm mã trong nội dung phương pháp để kiểm tra dấu vết ngăn xếp bằng cách sử dụng StackFrame
. Theo kinh nghiệm của tôi, các phương thức nội tuyến được loại trừ khỏi dấu vết ngăn xếp này.
Có thể mà không nhìn vào mã lắp ráp:
http://blogs.msdn.com/b/clrcodegeneration/archive/2009/05/11/jit-etw-tracing-in-net-framework-4.aspx
- 1. Kiểm tra phương pháp S4
- 2. Kiểm tra đơn vị phương pháp riêng - mục tiêu C
- 3. Google Mock phương pháp tĩnh kiểm tra đơn vị C++
- 4. Đơn vị kiểm tra phương pháp void?
- 5. Đơn vị kiểm tra phương pháp WCF
- 6. C# đơn vị kiểm tra: Kiểm tra một phương pháp có sử dụng MapPath
- 7. Kiểm tra nếu lớp có phương pháp trong PHP
- 8. phương pháp tư nhân kiểm tra trong Ruby (rspec)
- 9. Các phương pháp không kiểm tra trong Python TestCase
- 10. Phương pháp kiểm tra JUnit sử dụng các phương pháp khác trong cùng một đối tượng
- 11. constexpr, static_assert và inlining
- 12. Phương pháp trong C++
- 13. Làm thế nào để kiểm tra phương pháp void với các công cụ kiểm tra Junit?
- 14. Kiểm tra Ngoại lệ của một phương pháp với EasyMock
- 15. phương pháp kiểm tra junit cho getters & setters
- 16. "Inlining" (loại) chức năng tại thời gian chạy trong C
- 17. kiểm tra Parametric với các phương pháp chung
- 18. Phương pháp kiểm tra JUnit với tính chất ngẫu nhiên
- 19. Python: kiểm tra xem phương pháp là tĩnh
- 20. kiểm tra hành vi của khoảng trống phương pháp
- 21. Định cấu hình kiểu kiểm tra cho chuỗi phương pháp?
- 22. Python3: kiểm tra xem phương pháp là tĩnh
- 23. Phương pháp kiểm tra hỗ trợ kích thước nền css
- 24. Kiểm tra đơn vị Phương pháp mở rộng trên HtmlHelper
- 25. lập trình kiểm tra xem phương pháp là công khai
- 26. phương pháp tĩnh và kiểm tra đơn vị
- 27. Kiểm tra phương pháp cá nhân sử dụng Mockito
- 28. kiểm tra ngày hợp lệ với phương pháp DateTime.TryParse
- 29. C# Phương pháp mở rộng để kiểm tra các thuộc tính
- 30. C#: Bạn kiểm tra phương thức IEnumerable.GetEnumerator() như thế nào?