Đó là shown rằng 'làm' quá trình truyền nhanh hơn nhiều so với đúc tiền tố, nhưng phản ánh 'là' là gì? Nó tệ đến mức nào? Như bạn có thể hình dung, tìm kiếm 'is' trên Google không hiệu quả khủng khiếp.Đặc tính hiệu suất của sự phản chiếu 'là' trong C# là gì?
Trả lời
Có một vài lựa chọn:
- Các cổ điển đúc:
Foo foo = (Foo)bar
- Các
as
dàn diễn viên hành:Foo foo = bar as Foo
- Các
is
kiểm tra:bool is = bar is Foo
- Các diễn viên điển cần phải kiểm tra xem
bar
có thể được an toàn đúc đểFoo
(nhanh), và sau đó thực sự làm điều đó (chậm hơn), hoặc ném một ngoại lệ (rất chậm). - Nhà cung cấp
as
cần kiểm tra xembar
có thể được truyền, sau đó thực hiện hoặc không thể truyền an toàn, sau đó chỉ trả lạinull
. - Nhà cung cấp
is
chỉ kiểm tra xembar
có thể được truyền tới Foo và trả lạiboolean
hay không.
Kiểm tra is
nhanh vì nó chỉ thực hiện phần đầu tiên của thao tác đúc hoàn toàn. Nhà điều hành as
nhanh hơn dàn diễn viên cổ điển vì không ném ngoại lệ nếu dàn diễn viên không thành công (điều này làm cho các trường hợp bạn cho rằng hợp pháp có thể thất bại).
Nếu bạn chỉ cần biết nếu biến bar
là một Foo
sau đó sử dụng các nhà điều hành is
, NHƯNG, nếu bạn đang đi để kiểm tra nếu bar
là một Foo
, và nếu như vậy, sau đó cast nó, sau đó bạn nên sử dụng toán tử as
.
Về cơ bản, mọi diễn viên cần thực hiện tương đương với số is
kiểm tra nội bộ để bắt đầu, để đảm bảo rằng dàn diễn viên hợp lệ. Vì vậy, nếu bạn thực hiện kiểm tra is
, sau đó là một dàn diễn viên đầy đủ (hoặc là as
dàn diễn viên hoặc với nhà điều hành dàn diễn viên cổ điển), bạn sẽ thực hiện kiểm tra is
hai lần một cách hiệu quả.
Việc kiểm tra là chậm nhất, diễn viên là rất nhanh trên các loại tài liệu tham khảo, bởi vì nó chỉ trả về tham chiếu. –
Câu trả lời này đã giúp tôi có được ý tưởng .. – nawfal
"là" về cơ bản tương đương với toán tử "isinst" IL - bài viết đó mô tả nhanh.
Cần đủ nhanh để không quan trọng. Nếu bạn đang kiểm tra kiểu của một đủ đối tượng cho nó để tạo ra một tác động đáng kể về hiệu suất mà bạn cần phải suy nghĩ lại thiết kế của bạn
Con đường tôi học được nó là điều này:
if (obj is Foo) {
Foo f = (Foo)obj;
f.doSomething();
}
là chậm hơn so với điều này:
Foo f = obj as Foo;
if (f != null) {
f.doSomething();
}
Có đủ chậm không? Có lẽ không, nhưng đó là một điều đơn giản để chú ý, rằng bạn cũng có thể làm điều đó.
- 1. Hiệu suất phản chiếu - Tạo đại biểu (Thuộc tính C#)
- 2. "Phản chiếu đơn điệu" là gì?
- 3. Hiệu suất của phương thức STL bitset :: count() là gì?
- 4. Sự khác biệt giữa phản chiếu dựa trên gương và phản xạ truyền thống là gì?
- 5. Java: Lạm phát phản chiếu của JITC là gì?
- 6. Hiệu suất mong đợi của ZeroMQ là gì?
- 7. Các đặc tính của loại mảng của PHP là cấu trúc dữ liệu là gì?
- 8. Hiệu suất thời gian chạy phản chiếu Java
- 9. Tác động hiệu suất của truy tìm trong C# và ASP.NET là gì?
- 10. Hình phạt hiệu suất của việc sử dụng isKindOfClass trong Mục tiêu C là gì?
- 11. Biến tham chiếu trong C++ là gì?
- 12. Vấn đề hiệu suất lớn nhất trong Emberjs là gì?
- 13. Nguy cơ bảo mật đối tượng phản chiếu là gì?
- 14. Sự khác biệt hiệu suất giữa các khối và gọi lại là gì?
- 15. Hiệu quả và hiệu suất của LINQ và Lambda Expression trong .Net là gì?
- 16. Tính quan trọng của SQL là gì?
- 17. đặc điểm hiệu suất của T-SQL CTEs
- 18. Tiện ích của thuộc tính GeneratedCodeAttribute trong C# là gì?
- 19. Mục đích của Thuộc tính trong C# là gì?
- 20. Năng suất là gì ?, và lợi ích của việc sử dụng năng suất trong asp.net là gì?
- 21. Hiệu suất ORM (đặc biệt là NHibernate) cho các truy vấn phức tạp
- 22. Hiệu suất của mệnh đề "Hợp nhất" trong máy chủ sql 2008 là gì?
- 23. Mục đích của việc sử dụng tham chiếu đến tham chiếu trong C++ là gì?
- 24. Hiệu suất của phương thức mở rộng Last() cho Danh sách <T> là gì?
- 25. Hiệu suất khác biệt giữa phương pháp .NET (trong .dll) và phiên bản phản chiếu
- 26. Sự khác nhau về hiệu suất giữa HttpModule và Global.aspx là gì?
- 27. C# Các hiệu ứng đúc hiệu suất
- 28. sự khác biệt giữa "đặc điểm" và "đặc điểm mẫu" là gì?
- 29. ** trong C++ là gì?
- 30. Mô hình lưu trữ cấu trúc cây là gì và đặc điểm của chúng là gì?
'là' rất nhanh. –
Tôi nhận thấy ngày đó không phải là yếu tố quyết định duy nhất trong việc đóng các câu hỏi trùng lặp, nhưng câu hỏi của tôi đã được đăng và trả lời và upvoted tất cả trước khi câu hỏi khác được đăng. _It_ là bản sao, không phải bản sao này. –