Hi Everyone,
We're using the ComReleaser object in .NET to free up cursors, feature cursors and a few other COM objects in various functions through out our project.
The following code shows a typical implementation. We're finding that a number errors are being thrown in our code when it is running suggesting that the releaser is not working the way we think that i might be.
I am under the impression that the ComReleaser object "knows" to clean up as it gets to the "End Using" statement. Apparently not?
Errors that we're seeing are:
COM object that has been separated from its underlying RCW cannot be used.
Too many tables open.
Attempted to read or write to protected memory.
Bottom line, what is the best way to ensure that COM objects are cleaned up appropriately?
Thanks
D
Here is a typical implementation:
Using pComReleaser As ComReleaser = New ComReleaser
Try
Dim pBreakptFC As ESRI.ArcGIS.Geodatabase.IFeatureClass
Dim pQF As ESRI.ArcGIS.Geodatabase.IQueryFilter
Dim pTable As ESRI.ArcGIS.Geodatabase.ITable = Nothing
pComReleaser.ManageLifetime(pTable)
Dim pFeatCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor = Nothing
pComReleaser.ManageLifetime(pFeatCursor)
Dim pFeat As ESRI.ArcGIS.Geodatabase.IFeature
pBreakptFC = GetBreakptClass(MXApp)
pFeatCursor = Nothing
If Not pBreakptFC Is Nothing Then
pTable = pBreakptFC
pQF = New ESRI.ArcGIS.Geodatabase.QueryFilter
pQF.WhereClause = FIELD_PERIMETERID & " = " & CStr(PerimFeat.OID)
If pTable.RowCount(pQF) > 0 Then
pFeatCursor = pBreakptFC.Search(pQF, False)
pFeat = pFeatCursor.NextFeature
Do While Not pFeat Is Nothing
pFeat.Delete()
pFeat = pFeatCursor.NextFeature
Loop
End If
End If
pBreakptFC = Nothing
pQF = Nothing
pTable = Nothing
pFeat = Nothing
pFeatCursor = Nothing
Catch ex As Exception
LogError(LIBRARY_NAME, ex.ToString())
End Try
End Using