C#下ArcGIS的GEodatabase中workspace资源释放问题
IFeatureDataset pfeaturedataset = pFWorkspace.CreateFeatureDataset("CADGASDATASET", pSR);
同样使用的是
System.Runtime.InteropServices.Marshal.ReleaseComObject( pfeaturedataset);
方法,
使用了两个文件做实验,一个可以释放,一个释放后,锁定文件还是存在(未释放成功);释放后跟踪,查看前后对比
释放前
pfeaturedataset {System.__ComObject} [System.__ComObject]: {System.__ComObject} BrowseName: "CADGASDATASET" Category: "Personal Geodatabase Feature Dataset" FullName: {System.__ComObject} Name: "CADGASDATASET" PropertySet: “pfeaturedataset.PropertySet”引发了“System.Runtime.InteropServices.COMException”类型的异常 Subsets: {System.__ComObject} Type: esriDTFeatureDataset Workspace: {System.__ComObject}
释放后(文件1)成功:
pfeaturedataset
{System.__ComObject}
[System.__ComObject]: {System.__ComObject}
BrowseName: “pfeaturedataset.BrowseName”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Category: “pfeaturedataset.Category”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
FullName: “pfeaturedataset.FullName”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Name: “pfeaturedataset.Name”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
PropertySet: “pfeaturedataset.PropertySet”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Subsets: “pfeaturedataset.Subsets”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Type: “pfeaturedataset.Type”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Workspace: “pfeaturedataset.Workspace”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
释放后(文件2)失败:
pfeaturedataset
{System.__ComObject}
[System.__ComObject]: {System.__ComObject}
BrowseName: “pfeaturedataset.BrowseName”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Category: “pfeaturedataset.Category”引发了“System.ArgumentNullException”类型的异常
FullName: “pfeaturedataset.FullName”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Name: “pfeaturedataset.Name”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
PropertySet: “pfeaturedataset.PropertySet”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Subsets: “pfeaturedataset.Subsets”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Type: “pfeaturedataset.Type”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
Workspace: “pfeaturedataset.Workspace”引发了“System.Runtime.InteropServices.InvalidComObjectException”类型的异常
不知道什么原因,记录一下;
(后续)
资源释放没有成功,是因为第二次释放时与 pfeaturedataset相关的资源没有释放,如
IFeatureDataset pfeaturedataset= pFWorkspace.CreateFeatureDataset("CADGASDATASET", pSpatialReference);
而pSpatialReference
ISpatialReference pSpatialReference = new UnknownCoordinateSystemClass();
pSpatialReference.SetDomain(-xxxxxxxxx, xxxxxxxxx, -xxxxxxxxx, xxxxxxxx);
在执行ReleaseComObject()时,由于pSpatialReference不为空,导致抛出参数空异常;
查一下微软的msdn
ArgumentNullException 的引发条件为:调用某种方法时所传递的参数中,至少有一个在任何情况下都不应为 空引用(在 Visual Basic 中为 Nothing) 的参数为 空引用(在 Visual Basic 中为 Nothing)。
ArgumentNullException 的行为与 ArgumentException 相同。提供它的目的在于使应用程序代码可区分空参数导致的异常以及非空参数导致的异常。有关非空参数导致的错误,请参见 ArgumentOutOfRangeException。
ArgumentNullException 使用值为 0x80004003 的 HRESULT E_POINTER。
http://msdn.microsoft.com/zh-cn/library/system.argumentnullexception(VS.80).aspx
所以在释放想要是释放的资源时,相关的资源也要释放。
浙公网安备 33010602011771号