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有時就這麼難以理解的麻煩。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章