Tôi đang cố khắc phục một số vấn đề về thời gian khởi động. Sau khi làm một số hồ sơ, tôi đã tìm thấy thủ phạm chính là ClassProxyGenerator.GenerateCode. Điều này mất 400-600ms mỗi loại lần đầu tiên. Vì vậy, nếu điểm vào ứng dụng có 8 phụ thuộc (trong một chuỗi) cần proxy được tạo, thời gian khởi động của ứng dụng sẽ tăng 4,8 giây. Điều này có vẻ không nhiều, nhưng đối với người dùng, nó có vẻ giống như lứa tuổi.DynamicProxy Generation Speed
Bất kỳ lời khuyên nào để cải thiện điều này?
Cập nhật:
tôi có thể mô phỏng thời gian với các ứng dụng giao diện điều khiển sau:
var container = new WindsorContainer();
container.Register(Component.For<Interceptor>()); // dummy IInterceptor...does nothing
container.Register(Component.For<IMyRepository, MyAbstractRepository>().Interceptors<Interceptor>());
var t = DateTime.Now;
var instance = container.Resolve<IMyRepository>();
Debug.WriteLine("Resolved in " + (DateTime.Now - t).TotalMilliseconds);
đầu ra ở đâu đó giữa 550ms và 750ms.
IMyRepository là giao diện kho lưu trữ cho 30 loại thực thể (được tạo bởi mẫu T4). Nó có 31 IQueryables, 31 Lưu quá tải và 31 Xóa quá tải. MyAbstractRepository là một lớp trừu tượng một phần. Nó khai báo cùng phương thức 3 x 31.
Nếu tôi loại bỏ tất cả các lưu và xóa các phương pháp và để lại chỉ là 31 IQueryables VÀ không đăng ký kho trừu tượng
container.Register(Component.For<IMyRepository>().Interceptors<Interceptor>());
tôi vẫn chạy xung quanh 250ms cho thế hệ ban đầu.
Đây là một máy rất nhanh (rất rất) ... vì vậy, mọi thứ trong thế giới thực sẽ có khả năng hoạt động chậm hơn so với các số được liệt kê ở trên.
Điều đó thật lố bịch - trừ khi các loại của bạn có hàng trăm/nghìn phương pháp (hoặc bạn đang chạy mã trên máy 20 yo) không phải như vậy. Bạn có thể tạo ra sự sinh sản cô lập? –
Tôi biết ... và nó không phải là một máy 20 năm ... Nó có vẻ là một bộ cụ thể của các loại có holdup này (những người khác tạo ra trong 5-10ms) ... Tôi sẽ cô lập và cung cấp một mẫu mã. – Jeff
Nếu bạn có các phụ thuộc nơi sử dụng có thể được trì hoãn, bạn có thể ẩn phần đó của biểu đồ phụ thuộc phía sau proxy ảo. Xem ở đây để biết tổng quan về khái niệm: http://blog.ploeh.dk/2011/03/04/ComposeObjectGraphsWithConfidence.aspx –