2009-08-04 26 views
6

thể trùng lặp:
Loading DLLs into a separate AppDomainC# - Đang tải NET hội vào AppDomain riêng biệt để bạn có thể dỡ bỏ Nó

là gì cách thích hợp để nạp một assembly .NET thành một AppDomain riêng vì vậy bạn có thể truy cập vào các loại/lớp của nó nhưng vẫn có thể tải xuống (và tải lại).

Đây là một tiếp tuyến của cuộc thảo luận trước đây: C# - Correct Way to Load Assembly, Find Class and Call Run() Method

Trả lời

3

Về cơ bản, bạn chỉ cần tạo AppDomain mới, và sau đó gọi AppDomain.CreateInstanceAndUnwrap để tạo kiểu. Đây là một đơn giản CodeProject article về quá trình này.

Có một số thủ thuật, tại đây. Bạn không bao giờ có thể tham khảo Loại trực tiếp (điều này sẽ tải loại vào AppDomain hiện tại của bạn), và tất cả các đối tượng nên xuất phát từ MarshallByRefObj. Điều này sẽ cho phép bạn sử dụng đối tượng "từ xa", có nghĩa là giữ cho nó không tải vào AppDomain của bạn.

+0

+1 cảm ơn. Làm thế nào xấu là hình phạt hiệu suất mỗi khi bạn vượt qua AppDomains? – BuddyJoe

+1

Nó phụ thuộc. Bất cứ điều gì đi qua giữa appdomain teh về cơ bản là serialized trên. (Nó hoạt động rất giống với Remoting.) Nói chung, nếu tất cả các kiểu của bạn xuất phát từ MarshallByRefObj, chúng sẽ chỉ tuần tự hóa một "handle", vì vậy nó khá nhanh. Khi bạn đọc dữ liệu, dữ liệu sẽ được tuần tự hóa, điều này có thể làm chậm mọi thứ một chút. Cố gắng luôn giữ càng nhiều "nội bộ" trong appdomain thứ hai, và nó có thể sẽ không là một vấn đề. –

+0

Cũng lưu ý rằng thời gian cuộc gọi từ xa bị giới hạn. Tùy thuộc vào phiên bản .Net, bạn nên sử dụng WCF thay vì remoting. – Guillaume

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