CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 600

600
Chương 15: Khả năng liên tác mã lệnh không-được-quản-lý

7.

7.

Gi i phóng nhanh thành ph n COM

Gi i phóng nhanh thành ph n COM

Bạn cần bảo đảm một thành phần COM được xóa khỏi bộ nhớ ngay tức thì,
không phải chờ bộ thu gom rác (Garbage Collector
) làm việc. Hoặc bạn muốn
bảo đảm các đối tượng COM
được giải phóng theo một thứ tự xác định.

Sử dụng phương thức tĩnh

Marshal.ReleaseComObject

và truyền RCW thích hợp

để giải phóng tham chiếu đến đối tượng COM nằm dưới.

COM sẽ đếm các tham chiếu đến đối tượng để xác định khi nào đối tượng sẽ được giải phóng.
Khi bạn sử dụng một RCW, tham chiếu sẽ được giữ cả khi biến đối tượng vượt khỏi tầm vực.
Tham chiếu này chỉ được giải phóng khi bộ thu gom rác giải phóng đối tượng RCW. Do đó,
bạn không thể kiểm soát việc các đối tượng COM sẽ được giải phóng khi nào hoặc theo thứ tự
nào.
Để vượt qua hạn chế này, bạn có thể sử dụng phương thức

Marshal.ReleaseComObject

. Trong

ví dụ ở mục 15.6, bạn hãy thêm hai dòng sau vào cuối mã lệnh để giải phóng đối tượng

Recordset

Connection

nằm dưới.

Marshal.ReleaseComObject(rs);

Marshal.ReleaseComObject(con);

Về mặt kỹ thuật, phương thức

ReleaseComObject

không thực sự giải phóng đối

tượng COM, nó chỉ giảm số lượng tham chiếu đến đối tượng. Nếu số tham chiếu
0
, đối tượng COM sẽ được giải phóng. Tuy nhiên, nếu cùng thể hiện của một
đối tượng COM
được sử dụng tại nhiều mẩu mã lệnh, nó phải được giải phóng ở
các nơi đó trước khi được giải phóng khỏi bộ nhớ.

8.

8.

S d ng thông s tùy ch n

ử ụ

S d ng thông s tùy ch n

ử ụ

Bạn cần gọi một phương thức trong thành phần COM mà không phải truyền tất
cả các thông số cần thiết.

Sử dụng trường

Type.Missing

.

Hầu hết các phương thức trong .NET Framework đều được nạp chồng nhiều lần để bạn có thể
gọi phiên bản yêu cầu chỉ những thông số do bạn cung cấp. Mặt khác, COM không hỗ trợ việc
nạp chồng phương thức. Thay vào đó, các thành phần COM thường sử dụng các phương thức
với một danh sách dài các thông số tùy chọn. Không may là, C# không hỗ trợ thông số tùy
chọn, nghĩa là người phát triển phải cung cấp thêm các giá trị không cần thiết khi truy xuất
một thành phần COM. Và vì các thông số COM thường được truyền bằng tham chiếu nên mã
lệnh của bạn không thể truyền một tham chiếu

null

, mà phải khai báo một biến đối tượng và

rồi truyền biến đó.
Bạn có thể giảm nhẹ vấn đề đến một chừng mực nào đó bằng cách cung cấp trường

Type.Missing

bất cứ khi nào muốn bỏ qua một thông số tùy chọn. Nếu cần truyền một thông

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.