none
Vb2008引用Excel名字命名空间之后对于资源释放的问题 RRS feed

  • 问题

  • Vb2008引用Excel名字命名空间之后,使用Dim exl As New Excel.Application声明Excel对象,然后执行其他事情之后,最后exl = Nothing。同时我打开的Excel文件也关闭了,但是我没运行一次程序,在任务管理器的进程中就会出现一个Excel.exe的进程,运行次数多了之后进程中有很多这个进程,请问怎么解决这个问题呢?谢谢!
    2010年9月19日 9:59

答案

  • 你好

    或者你可以嘗試這個方法

    就是在所有你有 用 Microsoft.Office.Interop.Excel namespace define 的 variable

    你也用System.Runtime.InteropServices.Marshal.ReleaseComObject(exl ) exl = Nothing 方法 

    E.G.

     Dim ExcelApp As Microsoft.Office.Interop.Excel.Application

            Dim ExcelWorkBook As Microsoft.Office.Interop.Excel.Workbook

            Dim ExcelWorkSheet As Microsoft.Office.Interop.Excel.Worksheet

     Dim CellRange As Microsoft.Office.Interop.Excel.Range

     

     ReleaseExcelObject(CellRange)

            ReleaseExcelObject(ExcelApp)

            ReleaseExcelObject(ExcelWorkBook)

            ReleaseExcelObject(ExcelWorkSheet)

     

     Private Shared Sub ReleaseExcelObject(ByVal obj As Object)

            Try

                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)

                obj = Nothing

            Catch ex As Exception

                obj = Nothing

            Finally

                GC.Collect()

            End Try

        End Sub

    去整理他

    應該可以解決這個問題

    如果都不能的話

    你介不介意Post 你的Code 上來給我們參考?

    Please correct me if my concept is wrong



    Chi
    2010年10月27日 13:49

全部回复

  • 你好

    或者你可以嘗到用以下的Code 看看能不能释放资源

     Try
    
          System.Runtime.InteropServices.Marshal.ReleaseComObject(exl )
          exl = Nothing
    
        Catch
     ex As
     Exception
          exl = Nothing
    
        Finally
    
          GC.Collect()
        End
     Try
     
    

    Please correct me if my concept is wrong


    Chi
    • 已标记为答案 pucx 2010年9月19日 12:46
    • 取消答案标记 pucx 2010年9月27日 16:38
    2010年9月19日 11:34
  • 使用System.Runtime.InteropServices.Marshal.ReleaseComObject(exl ) exl = Nothing 方法效果也不是那么好的。还是会出现那种情况。
    2010年9月27日 16:39
  • 你好

    或者你可以嘗試這個方法

    就是在所有你有 用 Microsoft.Office.Interop.Excel namespace define 的 variable

    你也用System.Runtime.InteropServices.Marshal.ReleaseComObject(exl ) exl = Nothing 方法 

    E.G.

     Dim ExcelApp As Microsoft.Office.Interop.Excel.Application

            Dim ExcelWorkBook As Microsoft.Office.Interop.Excel.Workbook

            Dim ExcelWorkSheet As Microsoft.Office.Interop.Excel.Worksheet

     Dim CellRange As Microsoft.Office.Interop.Excel.Range

     

     ReleaseExcelObject(CellRange)

            ReleaseExcelObject(ExcelApp)

            ReleaseExcelObject(ExcelWorkBook)

            ReleaseExcelObject(ExcelWorkSheet)

     

     Private Shared Sub ReleaseExcelObject(ByVal obj As Object)

            Try

                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)

                obj = Nothing

            Catch ex As Exception

                obj = Nothing

            Finally

                GC.Collect()

            End Try

        End Sub

    去整理他

    應該可以解決這個問題

    如果都不能的話

    你介不介意Post 你的Code 上來給我們參考?

    Please correct me if my concept is wrong



    Chi
    2010年10月27日 13:49