多次使用我的数据导出功能后,机器就越用越慢,最后屏幕乱闪,我开始以为是病毒所产生,但是如果不使用该导出功能,机器正常,我想应该是系统 什么地方没有释放干净的原因,在进程中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;
}
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;
}
解决方案 »
- 求MagicAjax.dll,急用!那位好心人能发个给我,收到马上给分,谢谢了
- 如何过滤src和href中的危险脚本
- 有没有开源的ajax+c#做的留言版啊...给小第一个下载地址
- ASP.NET 记住用户名
- 请问ASP。NET(C#)中这种功能如何做?类似UBB的
- 无法创建ASP.NET应用程序??
- 怎样将字符转换成ASCII码,ASCII码转换成字符?
- 请教高手:asp.net(c#)如何在网页的一个底图上根据坐标显示小图片?高分求代码
- 关于用户控件
- jiaojiaohappy(小小)快来接分
- 想从事.net开发,请问各位大侠都要学习哪些技术?
- 我的电脑运行VB.NET写的BBS程序的话提示:没有安装组件?
调用这个方法试一下:
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(); }
}
} }