103
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
// Tạo một ListModifier trong miền ứng dụng mới
// sẽ thay đổi nội dung của list trong vùng đệm dữ liệu.
domain.CreateInstance("03-08", "ListModifier");
// Nhận lại danh sách và hiển thị nội dung của nó.
foreach (string s in (ArrayList)domain.GetData("People")) {
Console.WriteLine(s);
}
// Nhấn Enter để thoát.
Console.ReadLine();
}
}
9.
9.
Gi i phóng assembly và mi n ng d ng
ả
ề ứ
ụ
Gi i phóng assembly và mi n ng d ng
ả
ề ứ
ụ
Bạn cần giải phóng các assembly hay các miền ứng dụng lúc thực thi.
Không có cách nào để giải phóng các assembly riêng lẻ. Bạn có thể giải phóng
toàn bộ một miền ứng dụng bằng phương thức tĩnh
AppDomain.Unload
, đồng thời
với việc giải phóng miền ứng dụng là tất cả các assembly đã được nạp vào miền
ứng dụng đó cũng được giải phóng.
Cách duy nhất để giải phóng một assembly là giải phóng cả miền ứng dụng mà nó đã được
nạp vào. Đáng tiếc, việc giải phóng một miền ứng dụng cũng sẽ giải phóng luôn tất cả các
assembly đã được nạp vào đó. Đây là một giới hạn yêu cầu bạn phải tổ chức và quản lý tốt cấu
trúc miền ứng dụng và assembly.
Khi giải phóng một miền ứng dụng bằng phương thức tĩnh
AppDomain.Unload
, bạn cần truyền
cho nó một tham chiếu
AppDomain
đến miền ứng dụng cần giải phóng. Bạn không thể giải
phóng miền ứng dụng mặc định do CLR tạo lúc startup. Đoạn mã dưới đây trình bày cách sử
dụng phương thức
Unload
.
// Tạo một miền ứng dụng mới.
AppDomain newDomain = AppDomain.CreateDomain("New Domain");
// Nạp assembly vào miền ứng dụng mày.
§
// Giải phóng miền ứng dụng.
AppDomain.Unload(newDomain);
Phương thức
Unload
chặn các tiểu trình mới đi vào miền ứng dụng được chỉ định và gọi
phương thức
Thread.Abort
trên tất cả các tiểu trình hiện đang chạy trong miền ứng dụng này.
Nếu tiểu trình gọi phương thức
Unload
hiện đang chạy trong miền ứng dụng cần giải phóng thì
một tiểu trình khác sẽ được khởi chạy để thực hiện quá trình giải phóng. Nếu có vấn đề trong