这段时间在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在.Net 环境下Web方式下驻留内存问题的解决相关推荐

  1. 多重环境下web.config配置管理解决方案

    面临的问题 在大型web应用开发中,为了保证应用的质量,保证用户体验,我们开发时总要经历从开发,测试,beta到最终上线的过程. 因为不同的测试运行环境的参数都不同,所以在实际开发中我们可以编写多个w ...

  2. Tomcat下web项目部署方式

    静态部署 直接将web项目文件拷贝到webapps目录下 直接将web项目下WebRoot目录下所有内容复制到tomcat安装目录下的webapps目录,这个webapps目录是Tomcat目录的默认 ...

  3. mobile web retina 下 1px 边框解决方案

    http://www.tuicool.com/articles/ZRv6bun 再谈mobile web retina 下 1px 边框解决方案 时间 2015-01-03 12:03:31  Hug ...

  4. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行 ...

  5. Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...

    在这篇博客中,小编我将详细的讲解一下linux下web服务器的使用,相信这对于web网站维护人员来说是非常有用的,在linux下实现web服务器的软件有很多,最常用的就是apache啦,小编这里使用的 ...

  6. Windows环境下RabbitMQ的安装(安装过程以及解决安装过程的问题)

    目录 一.准备环境 1.下载Erlang 2.安装RabbitMQ 3.RabbitMQ安装时出现的问题 RabbitMQ的介绍:http://t.csdn.cn/6mSSu 一.准备环境 Rabbi ...

  7. Linux下Web服务器架设攻略

    Linux下Web服务器架设攻略 [收藏此页] [打印] [推荐] [挑错] 作者:小云  2004-12-23    内容导航: 概述 [IT168 专稿]今天我们来看看如何将Web服务器架在Lin ...

  8. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线...

    重温.NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现 ...

  9. [译] Web 爬虫下的 Python 数据分析:中情局全球概况图解

    原文地址:Data Analytics with Python by Web scraping: Illustration with CIA World Factbook 原文作者:Tirthajyo ...

最新文章

  1. 如何用一句话证明你是程序员?41 个答案揭晓!
  2. java 句柄 内存_Java内存区域学习
  3. 相角裕量的指令 matlab,[转载]什么是相角裕量、增益裕量?
  4. NC代码调试 - 持续更新
  5. linux有关信号的FAQ
  6. Python精通-Python字符串格式化操作
  7. mysql 中if(),left(),right(),with rollup的用法
  8. VB快速查找大型文件中包含的字符串
  9. 100: cf 878C set+并查集+链表
  10. python得语言编程模式_一图看懂编程语言迁移模式:终点站是Python、Go、JS!
  11. 报考南航计算机的专硕还是学硕呢?
  12. TortoiseCVS 安装遇到的一些问题
  13. express 是什么
  14. uniapp带视频和图片的轮播swiper(带全屏播放附源码)
  15. UDS知识整理(一):UDS简介与UDS要求规范简介
  16. shell脚本——awk详细介绍(包含应用案例)
  17. MATLAB代码:新能源接入的电力市场主辅联合出清 出清模型以考虑安全约束的机组组合模型(SCUC)和经济调度模型(SCED)组成
  18. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解
  19. C++ 探索之旅 | 第一部分第一课:什么是 C++
  20. oracle的视图如何使用,Oracle 视图讲解及使用实例

热门文章

  1. MySQL面试题 | 附答案解析(四)
  2. 3D相机(1):1、了解
  3. 并发编程之多进程编程(python版)
  4. 光耦p621引脚图_开关电源中光耦电路的设计与优点
  5. 【论文速读】基于投影方法的激光雷达点云处理比较
  6. UE建筑可视化全局照明学习 Unreal Engine: Global Illumination for Arch. Visualization
  7. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
  8. Zookeeper ZAB协议原理浅析
  9. 你真的了解Grid布局吗?
  10. 7、vue中将token存到cookie