Excel process remains in memory after ASP.NET automation.

Discussion in 'ASP .Net' started by Tim Marsden, May 26, 2004.

  1. Tim Marsden

    Tim Marsden Guest

    Hi,

    I have a routine which is call from a ASP.NET web form. This routine creates
    an excel application, opens a workbook , runs some code to update the
    workbook, saves it as HTML on the sever and returns to the Web form to
    display.

    All is OK, except EXCEL remains in the process list in task manager.
    I am following all guideline in releasing the com components.

    Regards
    Tim
    Tim Marsden, May 26, 2004
    #1
    1. Advertising

  2. Tim Marsden

    Curt_C [MVP] Guest

    I'm assuming you mean its running on the server and not client?
    and could you show how you release this component and call it.

    --
    Curt Christianson
    Owner/Lead Developer, DF-Software
    Site: http://www.Darkfalz.com
    Blog: http://blog.Darkfalz.com


    "Tim Marsden" <> wrote in message
    news:...
    > Hi,
    >
    > I have a routine which is call from a ASP.NET web form. This routine

    creates
    > an excel application, opens a workbook , runs some code to update the
    > workbook, saves it as HTML on the sever and returns to the Web form to
    > display.
    >
    > All is OK, except EXCEL remains in the process list in task manager.
    > I am following all guideline in releasing the com components.
    >
    > Regards
    > Tim
    >
    >
    >
    Curt_C [MVP], May 26, 2004
    #2
    1. Advertising

  3. Tim Marsden

    Tim Marsden Guest

    Many thanks for reply.

    Yes, you are correct it is on the server, I am aware of the licensing issues
    and lack of support from Microsoft.

    Code section

    Dim objExcelApplication As Excel.Application
    Dim objWorkbook As Excel.Workbook
    Dim objWorkbooks As Excel.Workbooks
    Dim objWorksheets As Excel.Worksheets
    Dim objWorksheet As Excel.Worksheet
    Dim dsExcelMenu As rdsExcelMenu

    Try

    Try
    objExcelApplication = New Excel.Application

    objExcelApplication.Visible = False
    objExcelApplication.DisplayAlerts = False

    Catch ex As Exception
    '>>> Excel Error
    Throw ex
    End Try

    Try
    objWorkbooks = objExcelApplication.Workbooks
    objWorkbooks.Open(strWorkbook, False, True)
    objWorkbook = objWorkbooks.Item(1)
    Catch ex As Exception
    '>>> Workbook Open Error
    Throw ex
    End Try

    ** process here etc

    Catch ex As Exception
    Throw ex
    Finally
    If Not objWorksheet Is Nothing Then
    ReleaseComObject(objWorksheet)
    End If
    If Not objWorksheets Is Nothing Then
    ReleaseComObject(objWorksheets)
    End If
    If Not objWorkbook Is Nothing Then
    objWorkbook.Close(False)
    ReleaseComObject(objWorkbook)
    End If
    If Not objWorkbooks Is Nothing Then
    ReleaseComObject(objWorkbooks)
    End If
    If Not objExcelApplication Is Nothing Then
    objExcelApplication.Quit()
    ReleaseComObject(objExcelApplication)
    End If
    GC.Collect()
    GC.WaitForPendingFinalizers()

    End Try
    '================================================================
    Private Sub ReleaseComObject(ByRef Reference As Object)
    Try
    Do Until
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Reference) <= 0
    Loop
    Catch
    Finally
    Reference = Nothing
    GC.Collect()
    End Try
    End Sub


    "Curt_C [MVP]" <software_AT_darkfalz.com> wrote in message
    news:...
    > I'm assuming you mean its running on the server and not client?
    > and could you show how you release this component and call it.
    >
    > --
    > Curt Christianson
    > Owner/Lead Developer, DF-Software
    > Site: http://www.Darkfalz.com
    > Blog: http://blog.Darkfalz.com
    >
    >
    > "Tim Marsden" <> wrote in message
    > news:...
    > > Hi,
    > >
    > > I have a routine which is call from a ASP.NET web form. This routine

    > creates
    > > an excel application, opens a workbook , runs some code to update the
    > > workbook, saves it as HTML on the sever and returns to the Web form to
    > > display.
    > >
    > > All is OK, except EXCEL remains in the process list in task manager.
    > > I am following all guideline in releasing the com components.
    > >
    > > Regards
    > > Tim
    > >
    > >
    > >

    >
    >
    Tim Marsden, May 26, 2004
    #3
  4. Tim Marsden

    bruce barker Guest

    this is expected behavior. you will have to add code to kill the process if
    you want it to go away.

    -- bruce (sqlwork.com)


    "Tim Marsden" <> wrote in message
    news:...
    > Hi,
    >
    > I have a routine which is call from a ASP.NET web form. This routine

    creates
    > an excel application, opens a workbook , runs some code to update the
    > workbook, saves it as HTML on the sever and returns to the Web form to
    > display.
    >
    > All is OK, except EXCEL remains in the process list in task manager.
    > I am following all guideline in releasing the com components.
    >
    > Regards
    > Tim
    >
    >
    >
    bruce barker, May 26, 2004
    #4
  5. I'm inclined to agree that this would be "expected" behavior - if you've paid your dues and discovered it through trial-and-error. But it seems like Tim Marsden read MS doccumentation and "expected" things to work as advertised

    What you are saying makes sense. Setting the application object to nothing doesn't seem to get the job done. You have to kill the process. Got any sample code?
    =?Utf-8?B?UmljaA==?=, May 27, 2004
    #5
  6. Tim Marsden

    Tim Marsden Guest

    Thanks for your thoughts

    I can kill a process easily, but how do I identify the Excel process which
    was started by my app, and not other running Excel processes.

    Tim

    "Rich" <> wrote in message
    news:...
    > I'm inclined to agree that this would be "expected" behavior - if you've

    paid your dues and discovered it through trial-and-error. But it seems like
    Tim Marsden read MS doccumentation and "expected" things to work as
    advertised.
    >
    > What you are saying makes sense. Setting the application object to

    nothing doesn't seem to get the job done. You have to kill the process.
    Got any sample code?
    Tim Marsden, May 27, 2004
    #6
  7. How many instances of Excel are you planning on having running at the same
    time on your server? Hint: your server will likely choke on more than one.
    You may have noticed that even a single instance of Excel runs rather
    slugishly on a web server.
    Read this article if you haven't already:
    http://www.aspnetpro.com/NewsletterArticle/2003/09/asp200309so_l/asp200309so_l.asp

    --
    I hope this helps,
    Steve C. Orr, MCSD, MVP
    http://Steve.Orr.net


    "Tim Marsden" <> wrote in message
    news:Om$...
    > Thanks for your thoughts
    >
    > I can kill a process easily, but how do I identify the Excel process which
    > was started by my app, and not other running Excel processes.
    >
    > Tim
    >
    > "Rich" <> wrote in message
    > news:...
    > > I'm inclined to agree that this would be "expected" behavior - if you've

    > paid your dues and discovered it through trial-and-error. But it seems

    like
    > Tim Marsden read MS doccumentation and "expected" things to work as
    > advertised.
    > >
    > > What you are saying makes sense. Setting the application object to

    > nothing doesn't seem to get the job done. You have to kill the process.
    > Got any sample code?
    >
    >
    Steve C. Orr [MVP, MCSD], May 27, 2004
    #7
  8. Tim Marsden

    Tim Marsden Guest

    Hi

    Thanks Steve, I have read your excellent article and it very enlightening

    I have realised the problems with Excel.
    I am now planning on moving the Excel processing one to another dedicated
    machine. With queuing and first come first served type basis, I just need to
    work out the mechanisms.
    If anyone has ideas on how I can achieve this I would be grateful.
    I have gone to far down this path to abandon the idea. (client request).
    My app is primarily local excel based, however I need a way of serving over
    the intranet.

    Regards
    Tim





    "Steve C. Orr [MVP, MCSD]" <> wrote in message
    news:...
    > How many instances of Excel are you planning on having running at the same
    > time on your server? Hint: your server will likely choke on more than

    one.
    > You may have noticed that even a single instance of Excel runs rather
    > slugishly on a web server.
    > Read this article if you haven't already:
    >

    http://www.aspnetpro.com/NewsletterArticle/2003/09/asp200309so_l/asp200309so_l.asp
    >
    > --
    > I hope this helps,
    > Steve C. Orr, MCSD, MVP
    > http://Steve.Orr.net
    >
    >
    > "Tim Marsden" <> wrote in message
    > news:Om$...
    > > Thanks for your thoughts
    > >
    > > I can kill a process easily, but how do I identify the Excel process

    which
    > > was started by my app, and not other running Excel processes.
    > >
    > > Tim
    > >
    > > "Rich" <> wrote in message
    > > news:...
    > > > I'm inclined to agree that this would be "expected" behavior - if

    you've
    > > paid your dues and discovered it through trial-and-error. But it seems

    > like
    > > Tim Marsden read MS doccumentation and "expected" things to work as
    > > advertised.
    > > >
    > > > What you are saying makes sense. Setting the application object to

    > > nothing doesn't seem to get the job done. You have to kill the process.
    > > Got any sample code?
    > >
    > >

    >
    >
    Tim Marsden, May 27, 2004
    #8
  9. Tim Marsden

    Eric Marvets Guest

    You can use System.Runtime.InteropServices.Marshal.ReleaseComObject(xxx) for
    each excel object that you work with, i.e. ranges, worksheets, workbooks,
    and the excel app itself. After that, set each of the objects to Nothing.
    When this is done, you can call GC.Collect, followed by
    GC.WaitForPendingFinalizers().

    The docs say never to call GC.Collect, but it will free the 25 MB + of
    memory excel is using, so its ok. Excel was never meant to be used as a
    server side app, and there are 3rd party products you can buy that will
    perform better.

    Hope this helps.

    --
    Eric Marvets
    Principal Consultant

    the bang project

    <shameless self promotion>

    Email for Information on Our
    Architecture and Mentoring Services

    </shameless self promotion>
    Eric Marvets, May 27, 2004
    #9
  10. Tim Marsden

    Tim Marsden Guest

    Thanks Eric

    As your can see from my early post, I am doing the steps you recommend, but
    the Excel is still resident.
    I will try a different approach. Thanks for your time.

    Regards
    Tim


    "Eric Marvets" <> wrote in message
    news:%239ogba$...
    > You can use System.Runtime.InteropServices.Marshal.ReleaseComObject(xxx)

    for
    > each excel object that you work with, i.e. ranges, worksheets, workbooks,
    > and the excel app itself. After that, set each of the objects to Nothing.
    > When this is done, you can call GC.Collect, followed by
    > GC.WaitForPendingFinalizers().
    >
    > The docs say never to call GC.Collect, but it will free the 25 MB + of
    > memory excel is using, so its ok. Excel was never meant to be used as a
    > server side app, and there are 3rd party products you can buy that will
    > perform better.
    >
    > Hope this helps.
    >
    > --
    > Eric Marvets
    > Principal Consultant
    >
    > the bang project
    >
    > <shameless self promotion>
    >
    > Email for Information on Our
    > Architecture and Mentoring Services
    >
    > </shameless self promotion>
    >
    >
    Tim Marsden, May 27, 2004
    #10
  11. Hi Tim,

    Does the same problem occur if you run Steven's Article's automation code?
    I've run it and the serverside excel process is successfully released. So I
    think you can try some any style code to see whether this is an expected
    result. Are you running the code with impersontating a powerful account
    such as administrator, this is also a possible cause. Thanks.


    Regards,

    Steven Cheng
    Microsoft Online Support

    Get Secure! www.microsoft.com/security
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)

    Get Preview at ASP.NET whidbey
    http://msdn.microsoft.com/asp.net/whidbey/default.aspx
    Steven Cheng[MSFT], May 31, 2004
    #11
  12. Hi Tim,

    Have you got any further ideas on this issue? If you have anything unclear
    or if there're anything else we can help, please feel free to post here.
    Thanks.

    Regards,

    Steven Cheng
    Microsoft Online Support

    Get Secure! www.microsoft.com/security
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)

    Get Preview at ASP.NET whidbey
    http://msdn.microsoft.com/asp.net/whidbey/default.aspx
    Steven Cheng[MSFT], Jun 3, 2004
    #12
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. \Rob\
    Replies:
    0
    Views:
    414
    \Rob\
    May 10, 2004
  2. Replies:
    3
    Views:
    753
    Adam P. Jenkins
    May 1, 2005
  3. zr
    Replies:
    18
    Views:
    2,007
    James Kanze
    Mar 28, 2009
  4. John Bailo
    Replies:
    1
    Views:
    142
    Mark Fitzpatrick
    Feb 23, 2007
  5. Terry Ledwith

    Dbase remains open after closing FP98

    Terry Ledwith, Aug 22, 2003, in forum: ASP General
    Replies:
    0
    Views:
    97
    Terry Ledwith
    Aug 22, 2003
Loading...

Share This Page