2011-01-03 31 views
8

Tôi đã tìm kiếm một chút cho một số kiểm tra hiệu suất về các tác vụ AOP điển hình. Tôi đã không thể tìm thấy bất kỳ mặc dù, bạn có thể giúp tôi? Tôi chủ yếu nghĩ về Castle, Unity và có lẽ PostSharp, mặc dù nó có thể quá đắt đối với dự án của tôi.Chi phí thực hiện AOP

+0

Xác định thử nghiệm hiệu suất. Biên dịch thời gian hoặc thời gian chạy? – TomTom

+0

PostSharp thực sự dệt các khía cạnh của bạn vào mã của bạn. Không có bất kỳ chi phí thực tế nào liên quan đến AoP. – Amy

Trả lời

4

Tôi cũng chưa thấy bất kỳ so sánh định lượng nào, vì vậy câu trả lời này có thể còn chưa đầy đủ.

Thật khó để so sánh hiệu suất của Lâu đài hoặc Thống nhất với PostSharp - Sử dụng lâu đài và Thống nhất runtime weaving bằng proxy động và PostSharp thêm phí trên at compile stage. Vì vậy, nếu hiệu suất là rất quan trọng đối với bạn, các giải pháp được biên dịch như PostSharp sẽ luôn tốt hơn. Tạo các proxy AOP trong thời gian chạy có nghĩa là tạo mã IL và sử dụng phản chiếu nặng.

Vì vậy, các thử nghiệm hiệu suất có thể có ý nghĩa phải so sánh các giải pháp bằng cách sử dụng cùng một kỹ thuật - bạn có thể thử so sánh triển khai proxy Dynamic Castle và Unity Interception proxy.

Tôi không biết trước đây, nhưng trong trường hợp sau, vẫn có ba trường hợp khác nhau để so sánh - proxy minh bạch (MarshalByRefObject), proxy giao diện và proxy lớp con - mỗi nhóm có tập hợp các tình huống sử dụng và chi phí hiệu suất của riêng mình. Từ những gì tôi đã đọc, proxy trong suốt quá chậm và không nên sử dụng trong các kịch bản AOP. Giao diện và subtyping proxy tạo ra một số IL trên bay và điều này giống như những gì Castle DP làm như vậy tôi tin rằng sự khác biệt không nên quá lớn (nhưng một lần nữa, không có kết quả định lượng ở đây).

1

Nếu bạn đang tìm kiếm một công cụ AOP trọng lượng nhẹ, có một bài viết "Thêm khía cạnh đối tượng sử dụng trang trí động" (http://www.codeproject.com/KB/architecture/aspectddecorator.aspx). Nó mỏng và linh hoạt.

Nó mô tả cách tiếp cận để thêm các khía cạnh vào đối tượng trong thời gian chạy thay vì thêm các khía cạnh vào lớp học tại thời điểm thiết kế. Ưu điểm của phương pháp này là bạn quyết định xem bạn có cần một khía cạnh khi bạn sử dụng một đối tượng hay không.

Hầu hết các công cụ AOP ngày nay đều xác định các khía cạnh ở cấp lớp tại thời gian thiết kế lớp học. Và bạn không có sự linh hoạt khi bạn sử dụng một đối tượng của các lớp.

0

Nếu hiệu suất là trọng tâm trong dự án của bạn, hãy đảm bảo việc sử dụng AOP của bạn được định hướng hiệu suất vì chi phí của khung AOP hiếm khi kém trừ khi việc sử dụng không tuân thủ.

Ví dụ: nếu bạn sử dụng DynamicProxy, bạn có thể chọn gọi điều trị sao lưu bằng cách sử dụng phản chiếu hoặc gọi phương thức Proceed(). Nó thay đổi hiệu suất khác nhau.

Ví dụ khác: hầu hết khung AOP cung cấp cho bạn MethodInfo cho "lời khuyên" của bạn. Cách làm thế nào họ có được metedata này có thể thay đổi hiệu suất của bạn bởi vì GetMethodFromHandle có thể rất xấu trong điều trị vô cùng đồng thời (truy cập từ điển với một khóa).

Một điều quan trọng cần lưu ý: sử dụng lớp phủ thích hợp cho phương pháp Tư vấn vì nếu AOP Framework phải chuẩn bị quá nhiều thông tin (đối số, phương thức, ...) Bạn sẽ trả nó (chi phí hoạt động). Thật không may, đôi khi không có giao diện người dùng cuối tốt để thực hiện một sự kiện lời khuyên thực hiện nếu đánh chặn là hoàn hảo.

Để biết thêm chi tiết, trong bài đăng when-is-aop-code-executed, tôi đưa ra phản hồi về vấn đề hiệu suất của Khung AOP.

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