Truy cập C# nội tuyến có thuộc tính không? Tôi nhận thức được giới hạn 32 byte (hướng dẫn?) Trên JIT cho nội tuyến, nhưng nó sẽ thuộc tính nội tuyến hoặc chỉ gọi phương thức thuần túy?Có thuộc tính nội tuyến C# không?
Trả lời
Tính đến JIT (trình biên dịch C# không thực hiện bất kỳ nội tuyến nào theo như tôi biết), nhưng tôi tin rằng JIT sẽ thuộc tính tầm thường trong hầu hết các trường hợp.
Lưu ý rằng nó sẽ không thành viên nội tuyến loại bắt nguồn từ MarshalByRefObject
bao gồm System.Windows.Forms.Control
(qua System.ComponentModel.Component
).
Tôi cũng thấy các trường double
kết thúc kém hiệu quả hơn khi được truy cập thông qua các thuộc tính - có thể có một số sự tinh tế xung quanh (do đăng ký sử dụng, v.v.).
Cũng lưu ý rằng các JIT 64 bit và 32 bit khác nhau, bao gồm cả việc xử lý những gì được gạch chân.
EDIT: Tôi vừa tìm thấy một 2004 blog entry bởi David Notario với một số thông tin khác. Tuy nhiên, đó là trước khi vận chuyển 2.0 - Tôi sẽ không ngạc nhiên khi thấy rằng ít nhất một số của nó đã thay đổi ngay bây giờ. Có thể được quan tâm anyway.
EDIT: Another question được gọi là 2008 Vance Morrison blog entry cung cấp thêm thông tin. Công cụ thú vị.
Quyền truy cập thuộc tính là chỉ là cuộc gọi phương thức thuần túy. Không có sự khác biệt trong IL trình biên dịch phát ra cho một truy cập tài sản và cho một cuộc gọi phương thức với một chữ ký tương tự, mà loại câu trả lời câu hỏi của bạn.
Trong khi tôi đồng ý với nguyên tắc chung, có * là sự khác biệt về IL ở phía * thuộc tính * JIT có thể "biết" rằng những gì được gọi là thành viên bất động sản, vì vậy * có thể * quyết định không JIT dựa trên thông tin đó. Nó sẽ là khá kỳ lạ để làm như vậy mặc dù, IMO. –
Có, các phương thức truy cập được đánh dấu bằng cờ 'specialname' và tên của chúng được chuẩn hóa.OTOH, các phương thức được điều trị đặc biệt từ CLR (giống như các hàm tạo) được đánh dấu bằng 'rtspecialname', do đó việc xử lý các trình truy cập khác nhau sẽ trái ngược với tinh thần của chuẩn CLI/CLR. –
Tôi mất một lúc để hiểu rằng trong Visual Studio bạn có thể xem việc tháo gỡ mã được quản lý, sau JIT biên dịch nó. Vì vậy, tại sao không tạo ra một lớp học với một thuộc tính accessor rất đơn giản, chạy nó trong chế độ phát hành, thiết lập một breakpoint, và xem những gì disassembly nói?
Tại sao bạn không cho chúng tôi biết làm thế nào để làm điều đó nếu (như bạn nói) đã đưa bạn một thời gian để tìm ra điều đó? –
Chỉ cần bước hoặc đột nhập vào mã và mở cửa sổ Tháo gỡ. –
Nếu bạn chạy mã chế độ phát hành bên dưới trình gỡ lỗi, hãy chạy nó dưới trình gỡ lỗi có khả năng vô hiệu hóa tối ưu hóa JIT! Thay vào đó bạn cần phải khởi động nó mà không có trình gỡ rối, hãy để nó JIT, và sau đó sử dụng trình gỡ rối để đính kèm vào tiến trình đã chạy (và * sau đó * mở cửa sổ tháo gỡ). – ChrisW
tôi đăng một câu hỏi tương tự gần đây:
Why are public fields faster than properties?
Vấn đề với tôi là một lĩnh vực nào là nhanh hơn so với một tài sản bởi vì tôi đang chạy 64-bit Vista và JIT biên soạn mã của tôi để 64-bit là tốt, và tài sản của tôi là không in-lót. Buộc các dự án biên dịch cho x86 đã làm trong dòng bất động sản và không có sự khác biệt tốc độ giữa tài sản và lĩnh vực công cộng.
Vì vậy, C# 32 bit JIT thực hiện các thuộc tính nội tuyến, 64 bit không có hoặc bất kỳ phương thức không tĩnh nào khác.
- 1. jQuery tìm theo thuộc tính css nội tuyến
- 2. Nội suy tuyến tính obj-c giữa hai số
- 3. Không có thuộc tính "allowtransparency"
- 4. Mẫu C++ và nội tuyến
- 5. Thuộc tính thiết lập nội bộ trong C# là gì?
- 6. Thuật toán này có tuyến tính không?
- 7. không có thuộc tính
- 8. Định tuyến thuộc tính MVC không hoạt động
- 9. Có bất kỳ thuộc tính hữu ích nào khác cho thuộc tính C# không?
- 10. truy xuất giá trị thuộc tính kiểu nội tuyến html với jsoup
- 11. Khi nào "nội tuyến" không hiệu quả? (trong C)
- 12. Làm thế nào để kéo ra CSS thuộc tính từ phong cách nội tuyến với BeautifulSoup
- 13. Chức năng nội tuyến trong C++
- 14. Tuyên bố IF nội tuyến trong C#
- 15. Các hàm nội tuyến có địa chỉ không?
- 16. Truyền chức năng Javascript thông qua thuộc tính dữ liệu nội tuyến
- 17. Lớp nội tuyến C++ là gì?
- 18. C#! Thuộc tính có điều kiện?
- 19. Làm cách nào để tạo các đối tượng nội tuyến bằng các thuộc tính trong Python?
- 20. Có thể tạo thuộc tính riêng trong Objective-C không?
- 21. Tại sao mảng C# không có thuộc tính Đếm?
- 22. Có thuộc tính chung trong C# 4 không?
- 23. Chức năng nội tuyến có liên kết nội bộ?
- 24. Thêm nội dung vào bố cục tuyến tính động?
- 25. Ninject 2.0: Tiêm thuộc tính không có thuộc tính
- 26. Thuộc tính PythonError: Đối tượng không có thuộc tính
- 27. jQuery kiểm tra xem phần tử có thuộc tính kiểu cụ thể được xác định nội tuyến
- 28. C++ Thuộc tính tĩnh
- 29. Không thuộc tính nội dung cho UITableView trong .xib
- 30. Thuộc tính nội dung CSS không hiển thị
Đáng chú ý là thuộc tính là trình bao bọc xung quanh một hoặc hai hàm get_Name, set_Name. Vì vậy, thuộc tính nội tuyến là một phần mở rộng tối thiểu trên chức năng nội tuyến. – Richard