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);
}
}
}
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);
}
}
}
1 个回复
朱新颖
赞同来自:
要回复问题请先登录或注册