Excel在.Net下驻留内存的解决方法

excel|解决

  这段时间在VS 2003 的WebForm 方式下对Excel 进行操作,遇到一个最为头疼的问题就是对Excel操作完毕后Excel不能够正常关闭,系统退出后,Excel总是驻留在内存中。但是这段代码放到WinForm的程序中又没有问题。在网上进行了查找也没有找到有效可行的办法。经过无数次的尝试,终于解决如下:

  原来书写如下:

  private Excel.Application m_app;
  private Excel.Workbook m_workbook;
  this.m_app = new Excel.ApplicationClass();
  this.m_app.DisplayAlerts = false;
  this.m_workbook = this.m_app.Workbooks.Open(sFilePath, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value );

  修改后如下:

  private Excel.Application m_app;
  private Excel.Workbooks m_workbooks;
  private Excel.Workbook m_workbook;
  this.m_app = new Excel.ApplicationClass();
  this.m_app.DisplayAlerts = false;
  m_workbooks = this.m_app.Workbooks;
  this.m_workbook = this.m_workbooks.Open(sFilePath, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value,
  Missing.Value );

  同样对Sheet的操作如下

  修改前如下:

  Excel._Worksheet worksheet1 = null;
  worksheet1 = (Excel._Worksheet) this.m_workbook.Worksheets.get_Item(sSheetName);
  修改后如下:
  Excel.Sheets sheets = null ;
  Excel._Worksheet worksheet1 = null;
  sheets = this.m_workbook.Worksheets;
  worksheet1 = (Excel._Worksheet) sheets.get_Item(sSheetName);

  发现区别了么?原来Workbooks,Worksheets这两个类没有被实例化就直接使用了,造成该类不能够被回收。最终造成Excel在内存的驻留。

  最终以如下方式释放。   private void ReleaseAllRef(Object obj)
  {
  try
  {
  if (obj != null )
  {
  while (Marshal.ReleaseComObject(obj) > 1);
  }
  }
  finally
  {
  obj = null;
  }
  }
  private void Release()
  {
  if (m_app != null )
  {
  m_app.Quit() ;
  }
  ReleaseAllRef(m_workbook) ;
  m_workbook = null ;
  ReleaseAllRef(m_workbooks) ;
  m_workbooks = null ;
  ReleaseAllRef(m_app) ;
  m_app = null ;
  System.GC.Collect() ;
  }

时间: 2024-10-28 02:09:57

Excel在.Net下驻留内存的解决方法的相关文章

《Excel高手捷径:一招鲜,吃遍天》一第28招 Excel打开CSV文件为乱码的解决方法

第28招 Excel打开CSV文件为乱码的解决方法 Excel高手捷径:一招鲜,吃遍天从网页上导出数据文件存储为CSV格式的文件,使用记事本打开文字显示没有问题,使用Excel打开出现乱码的情况,如图1-112所示. 此种情况一般是导出的文件编码的问题.在简体中文环境下,Excel打开CSV文件默认是ANSI编码,如果CSV文件的编码方式为UTF-8.Unicode等编码可能就会出现文件乱码情况.解决方法如下. 设置Office语言环境(以Office 2013为例): 文件→Excel选项→语

js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法

  这篇文章主要介绍了js插件设置innerHTML时在IE8下提示"未知运行时错误"解决方法,较为详细的分析了错误的原因及对应的解决方法,需要的朋友可以参考下 本文实例讲述了js插件设置innerHTML时在IE8下提示"未知运行时错误"解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 网站中使用了一个js插件,设置innerHTML时,在IE8下报错"未知运行时错误": ? 1 2 3 4 5 <div id="di

关于onchange事件在IE和FF下的表现及解决方法

 本篇文章主要是对关于onchange事件在IE和FF下的表现及解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在最近做的一个项目中,有这么一个功能点:页面上有一个checkbox,当用户选择或者取消选择该checkbox时会向后台发一个jsonp请求.当时的实现是为这个checkbox添加一个onchange事件,但结果却出人意料,为此,我深入的研究了一下,发现了onchange事件在IE和FF下的表现存在着以下问题.   问题①:在FF下,当改变checkbox的选中状态时

QL Server数据库占用过多内存的解决方法

QL Server数据库占用过多内存的解决方法 经常有网友会问,SQL Server占用了太多的内存,而且还会不断的增长:或者说已经设置了使用内存,可它没有用到那么多,这是怎么一回事儿呢? 下面,我们来具体看以看SQL Server是怎样使用内存的. 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看statistics io的时候,看到的physics read都是0. 其次就是查询的开

浅谈Excel开发(九) Excel开发中遇到的常见问题及解决方法

相关文章: 浅谈Excel开发(1) Excel开发概述 浅谈Excel开发(二) Excel 菜单系统 浅谈Excel开发(三) Excel 对象模型 Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可能会装有多个版本的.NET运行时,有时候也可能装有多个版本的Visual Studio,本人的开发机器上就安装了3个版本的Visual Studi

jvm内存溢出解决方法(jvm内存溢出怎么解决)_java

java.lang.OutOfMemoryError: PermGen space 发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 .然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat.还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类. 但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原

doscan.exe进程占用了大量的CPU和内存的解决方法_应用技巧

症状 在安装完Symantec AntiVirus Corporate Edition 10.0或Symantec Client Security 3.0重启电脑后,发现doscan.exe进程占用了大量的CPU和内存,在doscan.exe进程结束后,rtvscan.exe进程使用约40 MB的内存,使电脑运行速度变慢. 解决方法 这个问题已在Symantec AntiVirus 10.0.1 和 Symantec Client Security 3.0.1 中得到修复,安装上述版本的软件就可

梅花雨的日历控件在ASP.NET2.0下不可用的解决方法

asp.net|解决|控件|日历 梅花雨的日历控件的确很好用,可是在asp.net 2.0下,会发现安以往的方式用不起了,js报错"缺少对象".解决方法如下 1.<%@ Page Language="C#" CodePage="936"..... 一定加入936 ,否则出错 2.去掉 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu

Excel无法输入中文的原因及解决方法

症状:MS Office 2003,无法输入中文,用的MS自己的输入法,拼音五笔均不行,试过重装Office 2003,情况依旧.Word可以. 原因:软件冲突.HP的商用机,装有PDF Complete,与Excel冲突. 解决方法:网上查询,发现有多种可能原因及解决方法,最后看到几个case都是一样说是PDF Complete的问题,而且我们用的正好是HP的商用机.遂检查,果然发现此软件,删之. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bia