2009-10-10 27 views
7

Khớp nối lỏng là tuyệt vời tất nhiên, nhưng tôi thường tự hỏi những gì dây trên không lên động bằng cách sử dụng một container IoC (ví dụ Castle Windsor) có trên một hệ thống chặt chẽ?Chi phí thực hiện nào của các container IoC liên quan?

Tôi biết rằng một câu trả lời chi tiết sẽ phụ thuộc vào những gì IoC đã được sử dụng, nhưng tôi thực sự chỉ cố gắng để có được một cảm giác về độ lớn của nỗ lực tham gia vào công việc IoC.

Có ai có bất kỳ thống kê hoặc tài nguyên nào khác về vấn đề này không?

Cảm ơn

+1

Sau khi áp dụng IoC, hy vọng hệ thống của bạn sẽ không còn được kết hợp chặt chẽ nữa. ;) Tôi khuyên bạn nên thử nó trên một phần của hệ thống của bạn và (hiệu suất iff là quan trọng) điểm chuẩn. Tôi nghi ngờ rằng sẽ có một sự khác biệt đáng kể. Hầu hết các tắc nghẽn liên quan đến tài nguyên bên ngoài. – TrueWill

+0

Tôi đã sử dụng IoC - tôi đã tự hỏi liệu có ai có thông tin về điều này không. Không có điểm refactoring ứng dụng của tôi cho khớp nối chặt chẽ chỉ để chuẩn mực này nếu ai đó đã cố gắng một cái gì đó tương tự! – UpTheCreek

+0

nếu bạn muốn IoC nhanh nhất trên thị trường, hãy kiểm tra code.google.com/p/yadic được viết bằng F # cho .Net và scala cho java. Nó nhanh gấp 3 lần so với Autofac lambda – Xian

Trả lời

9

Có liên kết về hiệu suất
http://realfiction.net/?q=node/143
Có một kết quả

  • xây dựng bình thường: 0,0001/0,0002
  • Activator xây dựng: xây dựng 0,0069/0,0071
  • container (Lâu đài Windsor): 0.1014/0.1068
  • xây dựng container (Spring.NET): 0,069/0,0722

Nhưng như bạn thấy the Windsor isnt the fastest IoC (Autofac nhanh hơn nhiều)

Câu trả lời đúng là, việc thực hiện không thành vấn đề :) .
Bởi vì các chính xác bằng cách sử dụng IoC, khi tất cả các quá trình đăng ký là lúc khởi tạo giai đoạn.
Nói cách khác, việc sử dụng IoC phải giảm số lượng "nếu có" trong thời gian thực.

+2

Vâng, khách hàng không quan tâm đến thời gian tải. – Crashworks

+0

@Crashworks, thực tế, vì việc giảm hiệu suất thời gian thực, khách hàng khá hài lòng. – Avram

+0

Tôi đã châm biếm. – Crashworks

1

Bạn sẽ có thời gian khởi chạy chậm hơn vì mọi thứ được tải khi vùng chứa được bắt đầu. Nếu thời gian init không quan trọng với bạn, tất cả mọi người là một người chiến thắng trên bánh xe chuck-a-may mắn đó.

+0

Nhưng, theo liên kết đầu tiên trên bài đăng Avrams, có vẻ như thời gian đối tượng nội suy cũng dài hơn nhiều? – UpTheCreek

1

Cách tốt nhất để hiểu cách một container IoC phức tạp đến từ việc phân tích nó như thế nào.

Trong một trải nghiệm cụ thể, khi tôi đã dành toàn bộ buổi chiều, hãy gỡ lỗi mã 'Hello World' đơn giản bằng cách sử dụng plexus, Maven được dựa trên (and here is a helpful link to browse its source code).Nó kinda đã đưa ra (bằng cách nhìn vào defaultPlexusContainer) như:

  • Classpath Cấu hình (thông qua classworlds)
  • Tạo một Variable Runtime Bối cảnh (về cơ bản một bản đồ), để tính cửa hàng và các biến
  • Cấu hình phân tích cú pháp (khám phá các module siêu dữ liệu vào classpath, vv)
  • khởi:
    • xây dựng/õ Dịch vụ
  • Firing ComponentDiscoverers thêm
  • Firing của ComponentDiscovererListeners thêm

Đây lá một khía cạnh quan trọng, sâu vào các bước trên: Nhìn lên một thành phần. Trong plexus, khái niệm Phase kết thúc các bước để xây dựng một Object, và các Phase đó thường gắn với một khái niệm Personality. Tuy nhiên, cho default setting, điều này được thực hiện bằng cách thực hiện các giai đoạn sau đây:

  • Object õ (ví dụ, new Object())
  • Log Việc kích hoạt (ví dụ, thiết lập một logger cho đối tượng)
  • Thành phần : tức, tra cứu phụ thuộc và thiết
    • chiến lược setter là một điểm thú vị, nhưng tôi sẽ để lại các chi tiết cho bây giờ
  • Th e đi qua các bối cảnh vào đối tượng tạo
  • Đối tượng thêm khởi động thủ tục

Hầu hết các bước này là không bắt buộc, và thường liên quan đến việc xác định một giao diện nhất định và gọi đó là trên đối tượng mục tiêu - điều này là mặc định cho cá tính plexus, lưu ý rằng.

Ngoài ra, mỗi đối tượng có thể bị ràng buộc với một người quản lý vòng đời, mà chủ yếu là tạo sự khác biệt giữa một đối tượng mới và một singleton.

Trong bản ghi cụ thể của tôi: Phần khó nhất là phân tích cú pháp cấu hình và khởi động vùng chứa. Sau đó, bạn có thể nhận thấy không có sự khác biệt về hiệu suất.

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