Danh mục

Miền ứng dụng ,cơ chế phản chiếu và siêu dữ liệu phần 3

Số trang: 8      Loại file: pdf      Dung lượng: 175.14 KB      Lượt xem: 15      Lượt tải: 0    
10.10.2023

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

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.
Nội dung trích xuất từ tài liệu:
Miền ứng dụng ,cơ chế phản chiếu và siêu dữ liệu phần 3 1.1 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ấtcả 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ầntruyền cho nó một tham chiếu AppDomain đến miền ứng dụng cần giải phóng. Bạnkhô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 đâytrì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ọiphươ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ụngnà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ảiphó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ếucó vấn đề trong việc giải phóng miền ứng dụng, ngoại lệSystem.CannotUnloadAppDomainException sẽ bị ném bởi tiểu trình thực hiện quá trìnhgiải phóng.Trong khi miền ứng dụng đang được giải phóng, CLR gọi thực thi các phương thức giảiphóng của tất cả các đối tượng trong miền ứng dụng. Tùy thuộc vào số lượng đối tượngvà bản chất của các phương thức giải phóng mà quá trình này có thể mất một khoảng thờigian nào đó. Phương thức AppDomain.IsFinalizingForUnload trả về true nếu miền ứngdụng đang được giải phóng và CLR đã bắt đầu giải phóng các đối tượng trong đó; ngượclại, trả về false. 1.2 Truy xuất thông tin Type Bạn muốn thu lấy đối tượng System.Type mô tả một kiểu dữ liệu nhất định. Sử dụng một trong các cách sau: • Toán tử typeof • Phương thức tĩnh GetType của lớp System.Type • Phương thức GetType thuộc một thể hiện của kiểu • Phương thức GetNestedType hay GetNestedTypes của lớp Type • Phương thức GetType hay GetTypes của lớp Assembly • Phương thức GetType, GetTypes, hay FindTypes của lớp System.Reflection. ModuleĐối tượng Type cung cấp một điểm khởi đầu để làm việc với các kiểu dữ liệu bằng cơchế phản chiếu. Một đối tượng Type cho phép bạn kiểm tra siêu dữ liệu của kiểu, thu lấycác thành viên của kiểu, và tạo các đối tượng của kiểu. Do tầm quan trọng của nó, .NETFramework cung cấp nhiều cơ chế để lấy tham chiếu đến các đối tượng Type.Phương pháp hiệu quả nhất để thu lấy đối tượng Type cho một kiểu cụ thể là sử dụngtoán tử typeof:System.Type t1 = typeof(System.Text.StringBuilder);Tên kiểu không được đặt trong dấu nháy kép và phải khả phân giải đối với trình biêndịch. Vì tham chiếu được phân giải lúc biên dịch nên assembly chứa kiểu này trở thànhphần phụ thuộc tĩnh của assembly và sẽ được liệt kê như thế trong assembly manifest củabạn.Một cách khác là sử dụng phương thức tĩnh Type.GetType, nhận vào một chuỗi chứa tênkiểu. Vì sử dụng chuỗi để chỉ định kiểu nên bạn có thể thay đổi nó lúc thực thi, điều nàymở ra cánh cửa đến với thế giới lập trình động bằng cơ chế phản chiếu (xem mục 3.12).Nếu bạn chỉ định tên kiểu, bộ thực thi phải tìm kiểu này trong một assembly đã được nạp.Bạn cũng có thể chỉ định một tên kiểu theo tiêu chuẩn assembly (tham khảo tài liệu .NETFramework SDK về phương thức Type.GetType để biết cách kết cấu tên kiểu theo tiêuchuẩn assembly). Các lệnh sau trình bày cách sử dụng phương thức GetType:// Có phân biệt chữ hoa-thường, trả về null nếu không tìm thấy.Type t2 = Type.GetType(System.String);// Có phân biệt chữ hoa-thường,// ném ngoại lệ TypeLoadException nếu không tìm thấy.Type t3 = Type.GetType(System.String, true);// Không phân biệt chữ hoa-thường,// ném ngoại lệ TypeLoadException nếu không tìm thấy.Type t4 = Type.GetType(system.string, true, true);// Tên kiểu theo tiêu chuẩn assembly.Type t5 = Type.GetType(System.Data.DataSet,System.Data, + Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089);Để thu lấy đối tượng Type mô tả kiểu của một đối tượng hiện có, hãy sử dụng phươngthức GetType, được hiện thực bởi Object và được thừa kế bởi tất cả các kiểu dữ liệu.Dưới đây là một ví dụ:System.Text.StringBuilder sb = new System.Text.StringBuilder();Type t6 = sb.GetType();Bảng 3.2 tóm tắt các phương thức ...

Tài liệu được xem nhiều: