arcengine运行内插代码后 内存上升了大概30M release代码为什么不起作用?

代码如下:
IFeatureWorkspace pFeatureWorkspace = null;
IWorkspaceFactory pWorkspaceFactory = null;
IFeatureClass pFeatureClass = null;
IGeoDataset pGeoDataset = null;

ISaveAs2 pSaveAs2 = null;
//IEnumDataset pEnumDataset = null;
IWorkspace pWorkspace = null;
//IDataset pDataset = null;
try
{
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
pWorkspace = pWorkspaceFactory.OpenFromFile("E:\\test\\test", 0);
pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
pFeatureClass = pFeatureWorkspace.OpenFeatureClass("school.shp");
for (int i = 0; i < 1; i++)
{
pGeoDataset = IDWVariable(pFeatureClass, "id", 100, 2, 12, null, null, pWorkspace);

pSaveAs2 = (ISaveAs2)pGeoDataset;
pSaveAs2.SaveAs("tt"+i, pWorkspace, "GRID");
}

}
finally
{
ReleaseComObject.releaseComObject(pWorkspaceFactory);
ReleaseComObject.releaseComObject(pFeatureWorkspace);
ReleaseComObject.releaseComObject(pFeatureClass);
ReleaseComObject.releaseComObject(pGeoDataset);

}

internal IGeoDataset IDWVariable(IFeatureClass pInPointFClass, String fieldName, double CellSize, double Power, int PointNums, object maxDistance, IGeoDataset maskGeoDataset,IWorkspace pWorkspace)
{
IRasterRadius pRsRadius = null;
object objLineBarrier = null;
IGeoDataset outputDataset;
IInterpolationOp pInterpolationOp = null;
IFeatureClassDescriptor pFeatureClassDescriptor = null;
IRasterAnalysisEnvironment pRasterAnalysisEnvironment = null;
try
{

pFeatureClassDescriptor = new FeatureClassDescriptorClass();
pFeatureClassDescriptor.Create(pInPointFClass, null, fieldName);
pInterpolationOp = new RasterInterpolationOpClass();
pRsRadius = new RasterRadiusClass();
object objMaxDistance = null;
if (maxDistance != null)
{
objMaxDistance = maxDistance;
}
else
{
objMaxDistance = Type.Missing;
}
pRsRadius.SetVariable(PointNums, ref objMaxDistance);
if (maskGeoDataset == null)
{

pRasterAnalysisEnvironment = (IRasterAnalysisEnvironment) pInterpolationOp;
object objCellSize = CellSize;
pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref objCellSize);
pRasterAnalysisEnvironment.OutWorkspace = pWorkspace;
}
else
{

}

objLineBarrier = Type.Missing;
outputDataset = pInterpolationOp.IDW((IGeoDataset)pFeatureClassDescriptor, Power, pRsRadius, ref objLineBarrier);
return outputDataset;
}

finally
{
ReleaseComObject.releaseComObject(pRsRadius);
ReleaseComObject.releaseComObject(pFeatureClassDescriptor);
ReleaseComObject.releaseComObject(pInterpolationOp);

}
}

public class ReleaseComObject
    {
        /// <summary>
        /// 释放Com对象
        /// </summary>
        /// <param name="o"></param>
        public static void releaseComObject(object o)
        {
            if (o != null)
            {
                //Marshal.ReleaseComObject(o);
                Marshal.FinalReleaseComObject(o);
            }
        }
    }
已邀请:

朱新颖

赞同来自:

pSaveAs2.SaveAs("tt"+i, pWorkspace, "GRID");会返回一个IDataset对象,将其获取然后释放掉试试。

要回复问题请先登录注册