ArcGIS Engine中正确释放打开资源<转>
2015-06-04 11:47
204 查看
AE中对MDB,SDE等数据库操作时,打开后却往往不能及时释放资源,导致别人操作提示对象被锁定。
很多帖子说了很多原理,看的也烦且不实用,比如一句话概括的用System.Runtime.InteropServices.Marshal.ReleaseComObject(object o)释放,说的很不清楚,很多人试过觉的释放不掉。事实上,的确是用该方法,但释放的技巧在于,新建几个AE对象就要逐步释放几个,例如:
IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();
IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace;
IFeatureClass Fcls = Workspace.OpenFeatureClass ("District");
IFeatureLayer Fly = new FeatureLayerClass();
……
IFeature pf
IField pfield
……
再对象运行结束时释放,如:
System.Runtime.InteropServices.Marshal.ReleaseComObject(Fact);
System.Runtime.InteropServices.Marshal.ReleaseComObject(Workspace);
System.Runtime.InteropServices.Marshal.ReleaseComObject(Fcls);
System.Runtime.InteropServices.Marshal.ReleaseComObject(Fly);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pf);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pfield);
看到吧,千万不要以为你释放了等级最高的 IWorkspaceFactory, IWorkspace就算完事了。没办法,AE有时就这么难以理解的麻烦。
原文地址
相关文章推荐
- [转]五种常见的 PHP 设计模式
- mac eclipse 修改SDK路径
- 添加产品唯一性限制以后,复制按钮不能使用
- UITextField
- 在 Mockplus 设置页面链接,实现页面交互
- OLEDB错误
- mysql存储过程(完善中)
- C/C++堆栈指引
- UNIX环境下的消息队列
- [Selenium] 如何使 InternetExplorerDriver 每次启动的端口不会随机变化
- LeetCode_16---3Sum Closest
- 数据绑定的基础
- 亲测可用的更新Android SDK Manager方法
- MySQL学习分享--Thread pool实现
- mac os 使用git
- Primer – 支撑 GitHub 的 CSS 工具包和准则
- JavaScript中Number.MAX_VALUE属性的使用方法
- 写在51CTO学院2周年
- ListView的使用和数据绑定
- yum 时一直停在Determining fastest mirrors 界面