Câu trả lời:
Đáng chú ý nhất, luôn luôn giải phóng con trỏ một cách rõ ràng khi bạn hoàn thành chúng. Tôi cũng phát hành một số đối tượng liệt kê có nghĩa là truy cập cơ sở dữ liệu, ví dụ IEnumRelationship bạn nhận được từ IRelationshipClass.GetRelationshipsForObject .
Ngoài ra, khi bạn tạo ra nhiều phiên bản COM tồn tại trong thời gian ngắn (đặc biệt là trong các vòng lặp chặt chẽ), bạn cũng nên phát hành chúng một cách rõ ràng.
Cũng có những kịch bản khi phát hành các tham chiếu tính năng (hàng) riêng lẻ. Ví dụ: nếu bạn tạo phiên bản cơ sở dữ liệu địa lý mới, chỉnh sửa dữ liệu, đối chiếu & đăng bài, cố gắng xóa phiên bản sau đó có thể không thành công do có thể có các hàng chưa được phát hành, do đó sẽ giữ tham chiếu đến phiên bản (không gian làm việc) mà bạn đang cố gắng xóa. Mặc dù vậy, hầu hết các kịch bản như vậy rất hiếm và bạn không cần tính đến chúng trong quá trình phát triển ArcObjects hàng ngày của mình. Nó sẽ chỉ làm cho mã bị lộn xộn với việc dọn dẹp bên ngoài, làm cho nó ít được bảo trì hơn.
Một điều cũng quan trọng để nói khi không phát hành trình bao bọc .NET - không bao giờ phát hành RCW của ArcObjects rõ ràng có thể được sử dụng bởi bất kỳ mã được quản lý nào khác. Một ví dụ về điều này - không phát hành IMap khi ở ArcMap. Nói chung, đừng cố gắng phát hành ArcObjects mà bạn không tạo.
Đối với hầu hết các bộ sưu tập rác .NET hoạt động tốt. Có một số trường hợp trong ArcObject thực hiện công việc quan trọng đối với bộ giải mã và bản chất không xác định của trình bao bọc .NET có thể gây ra sự cố. Đây chủ đề trợ giúp bao gồm các trường hợp tiểu học phải được quan tâm về và làm thế nào để quản lý phiên bản.
Luôn luôn tiêu diệt:
Hãy cẩn thận để không phá hủy thứ gì đó đang được sử dụng ở nơi khác.
Hôm nay tôi đọc một cuộc thảo luận thú vị trên trang web ESRIs mà Kirk tham gia. Có nhiều ý kiến rất thú vị khác, chẳng hạn như việc sử dụng phương thức ReleaseComObject và FinalReleaseComObject (hoặc một cái gì đó tương tự). Xin lỗi tôi không có liên kết với tôi ngay bây giờ.
Một số người thậm chí còn đề nghị phát hành IRows, nhưng nhiều người đồng ý rằng việc để GC xử lý chúng trực tiếp sẽ dễ dàng hơn.
Tôi không bao giờ phát hành bất kỳ IGeometry's. Có ai đã thử chưa?
Tôi sẽ sử dụng ESRI.ArcGIS.ADF.ComReleaser. Điều đó đang được nói rằng tôi không chắc chắn chính xác những đối tượng vòng cung nào sử dụng mẫu phát hành xác định nhưng tôi chủ yếu gắn nó vào đối tượng IServerContext vì đó là điều quan trọng nhất.
using (ComReleaser comReleaser = new ComReleaser())
{
}
Dưới đây là một số thông tin tôi có thể có được tại hội nghị thượng đỉnh Nhà phát triển esri 2011.
Danh sách lớn mà tôi đã nhớ là dành cho các đối tượng đơn lẻ (có hai chủ đề trong trợ giúp).
Đây là liên kết từ các Thực tiễn tốt nhất để sử dụng ArcObjects trong .NET "Phát hành tài liệu tham khảo COM": http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Release_COM_Vferences/0001000004t0000
Và đây là một bài đăng trên Blog Geodatabase cho một cuộc thảo luận dài bốn triệu có chứa một danh sách các đối tượng: http://blogs.esri.com/dev/bloss/geodatabase/archive/2010/05/18/what_2700_s‑up‑with ‑Comreleaser_3f00_.aspx
(cuối cùng là một bài đăng blog với một liên kết để trợ giúp trong trường hợp url không hoạt động) http://bloss.esri.com/dev/bloss/geodatabase/archive/2008/12/18/USE‑the‑comreleaser‑to‑manage The ‑ trọn đời ‑ của con trỏ ‑ trong net .net.aspx
Đừng quên các đối tượng IWorkspace. Tại Hội nghị thượng đỉnh ESRI vài năm trước, tôi đã đặt câu hỏi và câu trả lời từ ESRI là các đối tượng ICthon và IWorkspace.
các quy tắc có khác nhau khi làm việc với các Đối tượng Máy chủ như Con trỏ trong SOI không? Tôi đang cố gắng sử dụng ComReleaser nhưng không thành công mỗi khi nó đến bất kỳ nơi nào gần phương thức trong mã SOI của tôi