ArcEngine添加图层时,内存释放问题备注

MARK:待解决。

ArcEngine自定义方法添加图层时,内存无法释放,而且关闭主控程序后,内存管理器中一直驻留EXE。

1. 命令方式:

           ControlsAddDataCommandClass command = new ControlsAddDataCommandClass();
            command.OnCreate(m_mapControl.Object);
            command.OnClick();

2. 手工方式:

  /加载图层并设置图层样式
 IWorkspaceFactory pWSFactory = new AccessWorkspaceFactoryClass();
 IWorkspace pWorkspace = pWSFactory.OpenFromFile(AppProperty.gcMDBPath, 0);
 IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
 IFeatureClass pFeatureClass = pFWS.OpenFeatureClass("工程");
 IFeatureLayer pFeatureLayer = new FeatureLayerClass();
 pFeatureLayer.Name = "工程";
 pFeatureLayer.FeatureClass = pFeatureClass;
 IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer;
 ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();
 simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSCross;
 ILineSymbol outLineSymbol = new SimpleLineSymbolClass();
  outLineSymbol.Width = 1;
  outLineSymbol.Color = GetColor(140, 140, 140, 100);
 simpleFillSymbol.Outline = outLineSymbol;
 simpleFillSymbol.Color = GetColor(140, 140, 140, 100);
 ISimpleRenderer simpleRender = new SimpleRendererClass();
 simpleRender.Symbol = simpleFillSymbol as ISymbol;
 pGeoFeatureLayer.Renderer = simpleRender as IFeatureRenderer;
  _mapControl.Map.AddLayer(pGeoFeatureLayer);

 

 

彻底的释放也不管用。

 System.Runtime.InteropServices.Marshal.ReleaseComObject(pFWS);
 System.Runtime.InteropServices.Marshal.ReleaseComObject(pWorkspace);
 System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSFactory);

  IMapControl3 _mapControl = (IMapControl3)axMapControlGHT.Object;
    for (int i = 0; i < _mapControl.Map.LayerCount; i++)
     {
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_mapControl.Map.get_Layer(i));
      }

 

 

******************************************************

无奈采用强制关闭EXE的方法释放内存

原文:http://kenter1643.javaeye.com/blog/451973

主程序Program.cs代码

  1. static class Program   
  2.     {   
  3.         /// <summary>   
  4.         /// 应用程序的主入口点。   
  5.         /// </summary>   
  6.         [STAThread]   
  7.         static void Main()   
  8.         {   
  9.             Application.EnableVisualStyles();   
  10.             Application.SetCompatibleTextRenderingDefault(false);   
  11.             Application.Run(new MainForm());   
  12.             //强制关闭进程   
  13.             string exeName = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;   
  14.             string[] exeArray = exeName.Split('//');   
  15.   
  16.             FunctionClass.RunCmd("taskkill /im " + exeArray[exeArray.Length-1] + " /f ");   
  17.         }   
  18.     }  

强制关闭方法:

  1. /// <summary>   
  2.         /// 运行DOS命令   
  3.         /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID   
  4.         /// </summary>   
  5.         /// <param name="command"></param>   
  6.         /// <returns></returns>   
  7.         public static string RunCmd(string command)   
  8.         {   
  9.             //實例一個Process類,啟動一個獨立進程   
  10.             System.Diagnostics.Process p = new System.Diagnostics.Process();   
  11.   
  12.             //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,下面我們用到了他的幾個屬性:   
  13.   
  14.             p.StartInfo.FileName = "cmd.exe";           //設定程序名   
  15.             p.StartInfo.Arguments = "/c " + command;    //設定程式執行參數   
  16.             p.StartInfo.UseShellExecute = false;        //關閉Shell的使用   
  17.             p.StartInfo.RedirectStandardInput = true;   //重定向標準輸入   
  18.             p.StartInfo.RedirectStandardOutput = true;  //重定向標準輸出   
  19.             p.StartInfo.RedirectStandardError = true;   //重定向錯誤輸出   
  20.             p.StartInfo.CreateNoWindow = true;          //設置不顯示窗口   
  21.   
  22.             p.Start();   //啟動   
  23.   
  24.             //p.StandardInput.WriteLine(command);       //也可以用這種方式輸入要執行的命令   
  25.             //p.StandardInput.WriteLine("exit");        //不過要記得加上Exit要不然下一行程式執行的時候會當機   
  26.   
  27.             return p.StandardOutput.ReadToEnd();        //從輸出流取得命令執行結果   
  28.   
  29.         }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值