ArcGIS Engine中正确释放打开资源

简介:

转自原文 ArcGIS Engine中正确释放打开资源

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有时就这么难以理解的麻烦。

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。

    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6262803.html ,如需转载请自行联系原作者
相关文章
|
SQL 开发框架 数据可视化
ArcGIS Engine学习系列1 AE基础介绍
市面上AE教程大致到ArcGIS10.2,ESRI宣布从ArcGIS10.5开始便停止AE的更新,使用AO做开发,初学者可以在学习C#语言后,从AE入门,逐渐过度到AO。不同版本下AE数据类型数量Enums:枚举类型,用于实现一些定义的内容Structs:结构体Interfaces:接口Classes:类AE开发中,为了更好地管理COM对象,ESRI将这些COM对象放到不同的组件库中。
299 0
|
C++ 容器
Qt+ArcGIS Engine 10.1 开发(二)
ArcGIS Engine+Qt(GUI开发,使用Qt提供的方法) 上面的这种方法,因为不能调试,所以我相信你不会喜欢,其实我也不喜欢,那我们就用这种方式吧,这种方式不需要上面提到的dll,因此也不需要额外的配置。
964 0
|
定位技术 容器 索引
ArcGIS Engine Style文件操作
对于一个GISer来说,地图,符号这些都应该有着比别人更深刻的理解和认识,作为平台软件都会提供一套自己的符号库,符号库里面根据类别和种类进行区分,因为点,线,面的自然存在和固有属性是不肯能让你用面状符号去渲染点和线的,学GIS的人,一般都会有分类的意识。
1048 0
|
定位技术
ArcGIS Engine中的Symbols详解
本文由本人翻译ESRI官方帮助文档。尊重劳动成果,转载请注明来源。 Symbols     ArcObjects用了三种类型的Symbol(符号样式)来绘制图形特征:marker symbols(标记符号),line symbols(线符号),和fill symbols(填充符号)。
910 0
|
定位技术 C# C++
VC2010+ArcGIS Engine 10.1 开发(一)
                      使用MFC(VS2010)开发ArcGIS Engine 10.1 网上C#结合ArcGIS Engine的资料简直太多了,多的都无法形容,但是C++的却很少,前一段时间不断的有人问在VC中如何开发ArcGI...
1106 0
|
C# 定位技术
VC2010+ArcGIS Engine 10.1 开发(二)
采用ActiveX控件插入的方式 上面我们是通过代码直接将地图控件放到界面上,这种有一个不好的地方就是,如果我们要设置控件的一些样式和视觉效果,我们要自己写很多代码,在C#中我们就很容易,其实在VC中也可以采用这种方式,下来我介绍下: 插入控件 在Vi...
847 0
|
开发工具 C++ C语言
Qt+ArcGIS Engine 10.1 开发(一)
  Qt作为一个跨平台C++图形用户界面应用程序开发框架,相当于微软的MFC(只能运行在Windows平台上),Qt命运多舛,几经易主,现在属于芬兰IT服务公司Digia。 Qt环境安装 Qt的最新版本是Qt5.0,该版本是在12月中旬发布的,在这里我用的是Qt4.8。
1322 0
|
C++
ArcGIS Engine 10报错:ArcGIS version not specified...
        ArcGIS Engine 10桌面应用程序第一次开发,于是使用VS创建一个简单的AE应用程序,然后拖放一个toolbar、LicenseControl以及MapControl控件。
791 0
|
分布式数据库 数据库
ArcGIS Engine+分布式数据库操作
我们知道Geodatabase的分布式数据库可以在线也可以离线,而在线和离线的接口是不同的,这是因为两者的操作过程不一样,我们看一下两者的区别:                                                                             ...
755 0
ArcGIS Engine+拓扑操作
///  /// 建立拓扑 ///  /// 目标数据集 /// 拓扑名称  public void CreateTopology(IFeatureDataset featureDataset, string topologyName)  { // 建立一个空拓扑(拓扑名称、获得数据集的...
839 0
下一篇
无影云桌面