多次使用我的数据导出功能后,机器就越用越慢,最后屏幕乱闪,我开始以为是病毒所产生,但是如果不使用该导出功能,机器正常,我想应该是系统 什么地方没有释放干净的原因,在进程中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;
}    

解决方案 »

  1.   

    代码好长,看起来费力..
    调用这个方法试一下:
    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(); }
    }
    } }
      

  2.   

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

  3.   

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