CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

解决了通过使用EXCEL.dll操作EXCEL文件的问题,格式也可以很好的控制,但是出现内存泄露的问题让我头疼不已,请高手指点迷津

楼主activeandbadboy(动感男孩)2005-11-01 16:40:26 在 .NET技术 / ASP.NET 提问

多次使用我的数据导出功能后,机器就越用越慢,最后屏幕乱闪,我开始以为是病毒所产生,但是如果不使用该导出功能,机器正常,我想应该是系统   什么地方没有释放干净的原因,在进程中excel的进程已经关闭。请高手们指教一下,谢谢了  
   
  部分代码:  
  system.gc.collect()是和导出函数分开写的  
  Excel.Worksheet   objSheet;  
  Excel.Application   objExcel;  
   
  objExcel=new   Excel.ApplicationClass();  
  objSheet=new   Excel.WorksheetClass();  
  try  
  {  
  sFile=Server.MapPath(Request.ApplicationPath+"/download/TeaInfoBookBak2.db");  
  sTemplate=Server.MapPath(Request.ApplicationPath+"/download/TeaInfoBookBak1.xls");  
   
  objExcel.Visible=false;  
  objExcel.DisplayAlerts=false;  
  objExcel.SheetsInNewWorkbook=1;  
  objExcel.Workbooks.Add(sTemplate);  
  objSheet=(Excel.Worksheet)objExcel.Workbooks[1].Worksheets[1];  
  //插入固定数据  
  // objSheet.Cells.Select();  
  // objSheet.Cells.Copy(objSheet.Cells[2,13]);  
  FormatRange((Excel.Range)objSheet.Cells[2,2],1,9);  
  // ((Excel.Range)objSheet.Cells[2,2]).Copy(objSheet.Cells[2,2]);  
  objSheet.Cells[2,2]=DateTime.Now.ToShortDateString()+"   "+DateTime.Now.ToShortTimeString();  
  //出入活动报表数据  
  int   RowNo=4,ColNo=1;  
  for(RowNo=4;RowNo<=dTable.Rows.Count-1+4;RowNo++)  
  {  
  for(ColNo=1;ColNo<=strField.Length;ColNo++)  
  {  
  string   dd=dTable.Rows[RowNo-4][strField[ColNo-1]].ToString();  
  // objSheet.Select(objSheet.Cells[RowNo,ColNo]);  
  ((Excel.Range)objSheet.Cells[4,13]).Copy(objSheet.Cells[RowNo,ColNo]);  
  objSheet.Cells[RowNo,ColNo]=dd+"   ";  
  }  
  }  
  objExcel.Workbooks[1].SaveCopyAs(sFile);  
  }  
  catch(Exception   e)  
  {  
  throw   new   Exception(e.Message.ToString());  
  }  
  finally  
  {  
  if   (objExcel!=   null)  
  {  
  // int   generation   =   0;  
  // objExcel.UserControl   =   false;  
  //如果您将   DisplayAlerts   属性设置为   False,则系统不会提示您保存任何未保存的数据。  
  //_xlApp.DisplayAlerts   =   false;  
  objExcel.Quit();  
  System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel);  
  System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet);  
  // generation   =   System.GC.GetGeneration(objExcel);  
  objExcel   =   null;  
  objSheet=null;  
  }          
   
   
   
  问题点数:100、回复次数:10Top

1 楼chaobeyond(阿漠)回复于 2005-11-01 16:45:41 得分 50

代码好长,看起来费力..  
  调用这个方法试一下:  
  private   void   KillExcelProceed()  
  {  
  int   ProceedingCount   =   0;  
  System.Diagnostics.Process[]   ExcelProcesses;  
  ExcelProcesses   =   System.Diagnostics.Process.GetProcessesByName("EXCEL");  
   
  foreach(System.Diagnostics.Process   IsProcedding   in   ExcelProcesses)  
  {  
  if(IsProcedding.ProcessName=="EXCEL")  
  {  
  ProceedingCount   +=   1;  
  }  
  }  
  if(ProceedingCount   >   0)  
  {  
  DialogResult   result;  
  result=MessageBox.Show("发现系统中有Excel进程,要关闭所有Excel进程吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information);  
           
  if(result==DialogResult.Yes)  
  {  
  foreach(System.Diagnostics.Process   myProcess   in   ExcelProcesses)  
  {  
  myProcess.Kill();  
   
  }  
  }  
  }  
   
  }Top

2 楼activeandbadboy(动感男孩)回复于 2005-11-01 16:52:01 得分 0

这就是杀所有进程马Top

3 楼activeandbadboy(动感男孩)回复于 2005-11-01 16:58:14 得分 0

GetProcessesByName汉书包错啊。。。。。系统说拒绝访问,,该怎么办啊Top

4 楼activeandbadboy(动感男孩)回复于 2005-11-01 17:02:34 得分 0

没有人知道这是为什么吗.....已经困扰我好久了,,清高手指点一下阿。。。。。。Top

5 楼smallMage(小马哥)回复于 2005-11-01 17:07:05 得分 30

http://dotnet.aspx.ccTop

6 楼feiyun0112(http://feiyun0112.cnblogs.com/)回复于 2005-11-01 17:21:16 得分 10

gc搜集垃圾Top

7 楼activeandbadboy(动感男孩)回复于 2005-11-02 10:22:16 得分 0

没有用,我是用料回收垃圾的,但是没有用,进程里面没有,但是系统要崩溃Top

8 楼jxufewbt(我的目标是5星)回复于 2005-11-02 10:49:30 得分 5

也许是你的机器中毒了Top

9 楼cuike519(I will be back!)回复于 2005-11-02 11:38:24 得分 5

请参考:http://www.codeproject.com/vb/net/ReleaseExcelObject.aspTop

10 楼activeandbadboy(动感男孩)回复于 2005-11-02 13:30:58 得分 0

机器没有中毒,,,我换多中杀毒软件均未杀出病毒,,,如果不使用数据导出,系统可以很好用Top

相关问题

  • 指点迷津
  • 指点迷津
  • 有关编写DLL的问题请教,请高手指点迷津
  • 一个excel无法打开的问题,恳请各位指点迷津!
  • 望指点迷津
  • 请高手指点迷津.
  • 高手指点迷津!!!!!
  • 请高手指点迷津
  • 请各位指点迷津!!
  • 高手请指点迷津...

关键词

  • excel
  • 数据
  • 系统
  • objsheet
  • objexcel
  • 导出
  • 进程
  • 高手
  • rowno
  • 机器

得分解答快速导航

  • 帖主:activeandbadboy
  • chaobeyond
  • smallMage
  • feiyun0112
  • jxufewbt
  • cuike519

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo