网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 软件教学 > 网络办公 > Excel教学
办公软件:Office,Word教程,Excel教程,Powerpoint教程,Wps Office
Tag:函数,日期,时间,格式,技巧,表格,插入,,筛选,导入,导出,单元格,图表,打印,数据分析,排序,统计,公式
本月文章推荐
.Excel统计某电话号码有多少人打过.
.Excel 2007中如何正确显示日期和.
.在Excel 2007中快速创建专业化的.
.Excel 2003表格中插入页码.
.向Excel 2007空白单元格批量写入.
.用Excel函数快速录入26个英文字母.
.利用窗体控件快速构建Excel动态图.
.让Excel 2003帮你轻松查出邮编.
.Excel 2007中隐藏或显示行和列的.
.Excel中利用身份证号码提取个人信.
.Excel表格中的序号操作技巧.
.巧用宏 随意提取Excel单元格的批.
.Excel单元格内按时间规律显示名言.
.Excel 2007默认的数据排序规则列.
.Excel中删除重复数据.
.Excel中完美冻结第一行、第一列的.
.Excel中调用VBA选择目标文件夹.
.Excel 2007快速定位超长行数据.
.excel中get.cell函数说明.
.Excel函数应用实例:自动录入性别.

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

发表日期:2007-3-23


  这段时间在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() ;
  }

上一篇:Excel 2007筛选唯一值或删除重复值 人气:7144
下一篇:重新应用Excel筛选和排序 或清除筛选 人气:8899
浏览全部Excel的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐