2009-03-05 26 views
18

thể trùng lặp:
How costly is .NET reflection?Phản chiếu thực sự chậm đến mức tôi không nên sử dụng nó khi nó có ý nghĩa?

Các "thanh lịch" giải pháp cho một problem Tôi gặp là sử dụng các thuộc tính để kết hợp một lớp và thuộc tính của nó với của người khác. Vấn đề là, để chuyển đổi nó sang cái kia, tôi sẽ phải sử dụng sự phản chiếu. Tôi đang xem xét nó cho một ứng dụng phía máy chủ sẽ được lưu trữ trên đám mây.

Tôi đã nghe nhiều sự rầm rộ của "phản chiếu chậm, không sử dụng nó", chậm như thế nào? Liệu nó có quá nhiều CPU đến nỗi nó sẽ nhân thời gian CPU của tôi đến nỗi tôi sẽ trả tiền cho quyết định sử dụng sự phản chiếu của tôi ở cuối kiến ​​trúc của tôi trên đám mây?

Trả lời

28

Chỉ trong trường hợp bạn không thấy bản cập nhật về vấn đề ban đầu: khi bạn đang phản ánh để tìm tất cả các loại có hỗ trợ một thuộc tính nhất định, bạn có cơ hội hoàn hảo để sử dụng bộ nhớ đệm. Điều đó có nghĩa là bạn không phải sử dụng sự phản chiếu nhiều lần trong thời gian chạy.

Để trả lời câu hỏi chung, phản ánh chậm hơn các cuộc gọi phương thức được biên dịch thô, nhưng nhanh hơn nhiều so với truy cập cơ sở dữ liệu hoặc hệ thống tệp và thực tế tất cả các máy chủ web đều làm những việc đó mọi lúc.

+0

Thiên tài (+4 ký tự) –

+2

+1 để lưu vào bộ nhớ cache kết quả. Nếu bạn đối xử với sự phản chiếu giống như đọc thông tin từ hệ thống tập tin thì bạn sẽ không đi sai - làm điều đó, nhưng không thường xuyên hơn bạn phải làm. – stevemegson

8

Có thể bạn thậm chí sẽ không nhận thấy điều đó. Luôn luôn hồ sơ đầu tiên trước khi suy nghĩ về tối ưu hóa.

15

Nhanh hơn nhiều lần so với truy cập hệ thống tệp.

Nhanh hơn nhiều lần so với truy cập cơ sở dữ liệu trên mạng.

Nhanh hơn nhiều lần nhiều lần so với gửi phản hồi HTTP tới trình duyệt.

4

Tôi đã tự hỏi điều tương tự; nhưng nó chỉ ra rằng sự phản chiếu không phải là tất cả những điều xấu. Tôi không thể tìm thấy các tài nguyên (tôi sẽ cố gắng liệt kê chúng khi tôi tìm thấy chúng), nhưng tôi nghĩ rằng tôi nhớ đọc rằng nó có thể là 2x đến 3x chậm hơn. 50% hoặc 33% tốc độ nhanh vẫn nhanh.

Ngoài ra, tôi theo biểu mẫu web ASP.net và MVC thực hiện một loạt các phản ánh, vậy làm thế nào chậm nó thực sự có thể được?

EDIT

Dưới đây là một nguồn tài nguyên Tôi nhớ đọc: .Net Reflection and Performance

3

Hmm, tôi cố gắng tránh sự phản chiếu nếu có thể, nhưng nếu tôi phải tạo ra một giải pháp, và sự phản chiếu sẽ cho tôi một cách thanh lịch để giải quyết vấn đề trong tay, tôi sẽ sử dụng sự phản chiếu.

Nhưng, phải nói rằng tôi nghĩ rằng không nên sử dụng sự phản chiếu để thực hiện 'các thủ thuật bẩn thỉu'. Tại thời điểm này, tôi cũng đang làm việc trên một giải pháp mà tôi sử dụng các thuộc tính tùy chỉnh để trang trí một số lớp, và có, tôi sẽ phải sử dụng sự phản chiếu để biết một lớp/thuộc tính/bất cứ điều gì đã được trang trí bởi tùy chỉnh của tôi thuộc tính.

Tôi cũng nghĩ rằng đó là vấn đề 'bạn thực hiện cuộc gọi phản chiếu' bao nhiêu? Nếu có thể, tôi sẽ cố gắng lưu lại kết quả của mình. Giống như, trong giải pháp mà tôi đang làm việc: khi khởi động ứng dụng, tôi kiểm tra một số loại nhất định trong một hội đồng nhất định, cho dù các loại đó đã được trang trí với thuộc tính của tôi chưa, và tôi giữ chúng trong từ điển.

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