arcengine 开发几个注意释放内存的地方
在循环、查询过程中经常出现如下错误:
1 、循环的 游标一定要释放不然会报错。
private void find_allroads_lxbm(IFeature feature_ld, string lxbm)
{
try
{
ISpatialFilter spatialfilter = new SpatialFilterClass();
spatialfilter.WhereClause = "[LXBM] = " + lxbm;
spatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
//feature_ld该路段 feature_last下一路段
while (feature_ld != null)
{
IPolyline polyline = feature_ld.Shape as IPolyline;
//缓冲
IPoint end_pt = polyline.ToPoint;
ITopologicalOperator topo2 = end_pt as ITopologicalOperator;
IGeometry geo_buffer_end = topo2.Buffer(1);
spatialfilter.Geometry = geo_buffer_end;
IFeatureCursor featcursor_lastld = m_featcls.Search(spatialfilter, true);
IFeature feature_last = featcursor_lastld.NextFeature();
try
{
while (feature_last != null)
{
/****省略***/
}
}
catch (Exception exx)
{
MessageBox.Show(exx.ToString());
}
//下一个
feature_ld = feature_last;
System.Runtime.InteropServices.Marshal.ReleaseComObject(featcursor_lastld);
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(spatialfilter);
////垃圾回收
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
}
catch (Exception exx)
{
MessageBox.Show(exx.ToString());
}
}
2 关于查询(ISpatialFilter,IQueryFilter):
//该路线编码路段数量
IQueryFilter queryfilterall = new QueryFilterClass();
queryfilterall.WhereClause = " [LXBM]= "+ lxbm;
LDBM_MAXCOUNT = m_featcls.FeatureCount(queryfilterall);
//起始值
start_index = Convert.ToInt32(start_lxh);
IQueryFilter queryfilter = new QueryFilterClass();
queryfilter.WhereClause = " [LDBM]= "+ start_ldbm;
IFeatureCursor featcursor = m_featcls.Search(queryfilter, true);//最好是true
参考:http://www.cnblogs.com/gisoracle/archive/2012/01/28/2330541.html
为true分析:pFeatures集合存储了指向FeatureClass上所有Feature的引用,但是由于Recycling参数设置为TRUE也就是说每执行一个NextFeautre方法上一条记录的Feature值在内存中被回收,所以到最后遍历pFeatures集合的时候所有的IFeature引用指向的Feature对象都为Null。
未false分析:分析:pFeatures集合存储了指向FeatureClass上所有Feature的引用,但是由于Recycling参数设置为False也就是说每执行一个NextFeautre方法上一条记录的Feature值在内存中依然存在,所以到最后遍历pFeatures集合的时候所有的IFeature引用指向的Feature对象都依然存在。所以会执行的很Happy(如下图所示):
转载自:https://mtr-1.oss-cn-beijing.aliyuncs.com/qyblog/2019/04/54376726.jpg