ArcObject10.1 :ILasDataset.Export 方法内存泄露

在利用ILasDataset.Export()方法进行区域范围内的Las导出的工作时,发现每次运行都会产生一些内存泄露。如果放在循环中则会导致资源枯竭。
循环内调用的代码如下:
/// <summary>
/// Esri导出点云包装方法
/// </summary>
/// <param name="lasdLayer">需要进行操作的点云图层</param>
/// <param name="geometry">作为约束的几何对象</param>
/// <param name="lasSavePath">点云保存路径</param>
/// <param name="overwrite">是否覆盖文件</param>
/// <returns>True-导出成功,False-导出失败</returns>
public static bool ExportLasFromAE(ILasDatasetLayer lasdLayer, IGeometry geometry, string lasSavePath, bool overwrite)
{
using (ESRI.ArcGIS.ADF.ComReleaser pComReleaser = new ESRI.ArcGIS.ADF.ComReleaser())
{
ILasDataset pLasDataset = lasdLayer.Dataset;
ITrackCancel pCancel = null;
ILasFilter pLasFilter = new LasFilterClass();
pComReleaser.ManageLifetime(pLasFilter);
pLasFilter.AreaOfInterest = geometry;
ISpatialReference pSpatialReference = lasdLayer.Dataset.SpatialReference;

// 判断文件路径是否存在
string pFileDirectory = System.IO.Path.GetDirectoryName(lasSavePath);
string pFileName = System.IO.Path.GetFileNameWithoutExtension(lasSavePath);
string pFileExtensionName = System.IO.Path.GetExtension(lasSavePath);
//IEnvelope pGeometryEnvelop = geometry.Envelope;
IRelationalOperator pRelationalOperator = geometry as IRelationalOperator;
for (int i = 0; i < pLasDataset.FileCount; i++)
{
ILasFile pLasFile = pLasDataset.get_File(i);
IEnvelope pLasFileEnvelope = pLasFile.Extent;
if (pRelationalOperator.Disjoint(pLasFileEnvelope))
{
continue;
}
int pFileIndex = i;
string pFilePath = string.Format("{0}//{1}_{2}{3}", pFileDirectory, pFileName, i.ToString(), pFileExtensionName);

if (File.Exists(pFilePath))
{
if (overwrite)
{
File.Delete(pFilePath);
}
else
{
continue;
}
}
pLasDataset.Export(pCancel, pFileIndex, pLasFilter, pFilePath, pSpatialReference, false, false);
}
}
return true;
}
已邀请:

要回复问题请先登录注册