Hiệu suất phản chiếu sẽ phụ thuộc vào việc triển khai (các cuộc gọi lặp đi lặp lại nên được lưu vào bộ đệm, ví dụ: entity.GetType().GetProperty("PropName")
:). Vì hầu hết các phản xạ mà tôi thấy trên cơ sở hàng ngày được sử dụng để cư trú các thực thể từ các trình đọc dữ liệu hoặc các cấu trúc kiểu kho lưu trữ khác, tôi đã quyết định đánh giá hiệu năng cụ thể về phản xạ khi nó được sử dụng để lấy hoặc đặt thuộc tính đối tượng.
Tôi đã nghĩ ra một thử nghiệm mà tôi nghĩ là công bằng vì nó lưu trữ tất cả các cuộc gọi lặp lại và chỉ nhân với cuộc gọi SetValue hoặc GetValue thực tế. Tất cả mã nguồn cho bài kiểm tra hiệu suất đều có trong bitbucket tại: https://bitbucket.org/grenade/accessortest . Giám sát được chào đón và khuyến khích.
Kết luận mà tôi đã đưa ra là nó không thực tế và không cung cấp các cải tiến hiệu suất đáng chú ý để loại bỏ sự phản chiếu trong lớp truy cập dữ liệu đang trả về ít hơn 100.000 hàng tại một thời điểm khi việc thực hiện phản chiếu được thực hiện tốt.
Biểu đồ trên cho thấy đầu ra của điểm chuẩn nhỏ của tôi và cho thấy các cơ chế vượt trội hơn so với phản xạ, chỉ thực hiện đáng chú ý sau khi đánh dấu 100.000 chu kỳ. Hầu hết các DAL chỉ trả về hàng trăm hoặc có thể hàng ngàn hàng tại một thời điểm và ở các mức này, phản xạ chỉ hoạt động tốt.