Giả sử mã bạn đang gọi phương thức này nhận biết các loại đối số. Nếu vậy, bạn có thể đóng gói chúng vào loại Tuple
thích hợp từ .NET 4 và truyền thể hiện của nó (Tuple là kiểu tham chiếu) đến phương thức như đối tượng (vì không có cơ sở chung cho tất cả các Tuple).
Vấn đề chính ở đây là nó không phải là dễ dàng để xử lý các đối số bên trong phương pháp này mà không có boxing/unboxing, và có khả năng, thậm chí không có sự phản ánh. Cố gắng suy nghĩ những gì phải được thực hiện để trích xuất, giả sử, đối số thứ N mà không có quyền anh. Bạn sẽ kết thúc với sự hiểu biết bạn phải hoặc là đối phó với tra cứu từ điển (s) có (liên quan hoặc thường xuyên Dictionary<K,V>
hoặc internal dictionaries được sử dụng bởi CLR), hoặc với boxing. Rõ ràng, tra cứu từ điển là tốn kém hơn nhiều.
Tôi viết bài này vì chúng tôi đã phát triển giải pháp cho vấn đề tương tự: chúng tôi phải có thể hoạt động với our own Tuples mà không cần quyền anh - chủ yếu là để so sánh và deserialize chúng (Tuple được sử dụng bởi cơ sở dữ liệu mà chúng tôi phát triển. của bất kỳ hoạt động cơ bản nào thực sự cần thiết trong trường hợp của chúng tôi).
Nhưng:
- Chúng tôi kết thúc với giải pháp khá phức tạp. Hãy xem ví dụ: tại TupleComparer.
- Ảnh hưởng của việc thiếu boxing thực sự không tốt như mong đợi: mỗi thao tác boxing/unboxing được thay thế bằng chỉ mục mảng đơn và vài cuộc gọi phương thức ảo, chi phí của cả hai cách gần giống nhau.
Lợi ích duy nhất của cách tiếp cận mà chúng tôi phát triển là chúng tôi không "tràn" Gen0 bởi rác thải, vì vậy các bộ sưu tập Gen0 hiếm khi xảy ra hơn nhiều. Vì chi phí thu thập Gen0 tỷ lệ thuận với không gian được phân bổ bởi các đối tượng "sống" và số đếm của chúng, điều này mang lại lợi thế đáng chú ý, nếu các phân bổ khác xen kẽ với (hoặc đơn giản là xảy ra trong) thực hiện thuật toán chúng tôi cố gắng tối ưu hóa theo cách này.
Kết quả: sau khi tối ưu hóa này, các thử nghiệm tổng hợp của chúng tôi được hiển thị từ 0% đến 200-300% tăng hiệu suất; mặt khác, kiểm tra hiệu suất đơn giản của bản thân cơ sở dữ liệu đã cho thấy sự cải thiện ít ấn tượng hơn nhiều (khoảng 5-10%). Rất nhiều thời gian đã bị lãng phí ở các lớp trên (cũng có một ORM khá phức tạp), nhưng ... Rất có thể đó là những gì bạn sẽ thực sự thấy sau khi thực hiện các công cụ tương tự.
Tóm lại, tôi khuyên bạn nên tập trung vào một thứ khác. Nếu nó sẽ được hoàn toàn rõ ràng đây là một vấn đề hiệu suất lớn trong ứng dụng của bạn, và không có cách nào khác tốt để giải quyết nó, tốt, đi trước ... Nếu không bạn chỉ đơn giản là thép từ khách hàng của bạn hoặc của riêng bạn bằng cách làm sớm tối ưu hóa.
Nguồn
2009-12-11 22:13:41
có nhưng điều này giới hạn loại toàn bộ danh sách đối số thành một loại ... – DxCK
Bạn có thể kết hợp và khớp với quá tải ... –
Tôi đã chỉnh sửa để thêm thông tin tại đây ... –