Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Excel process remains in memory after ASP.NET automation.

Reply
Thread Tools

Excel process remains in memory after ASP.NET automation.

 
 
Tim Marsden
Guest
Posts: n/a
 
      05-26-2004
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



 
Reply With Quote
 
 
 
 
Curt_C [MVP]
Guest
Posts: n/a
 
      05-26-2004
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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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
>
>
>



 
Reply With Quote
 
 
 
 
Tim Marsden
Guest
Posts: n/a
 
      05-26-2004
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.ReleaseComO bject(Reference) <= 0
Loop
Catch
Finally
Reference = Nothing
GC.Collect()
End Try
End Sub


"Curt_C [MVP]" <software_AT_darkfalz.com> wrote in message
news:(E-Mail Removed)...
> 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" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > 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
> >
> >
> >

>
>



 
Reply With Quote
 
bruce barker
Guest
Posts: n/a
 
      05-26-2004
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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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
>
>
>



 
Reply With Quote
 
=?Utf-8?B?UmljaA==?=
Guest
Posts: n/a
 
      05-27-2004
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?
 
Reply With Quote
 
Tim Marsden
Guest
Posts: n/a
 
      05-27-2004
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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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?


 
Reply With Quote
 
Steve C. Orr [MVP, MCSD]
Guest
Posts: n/a
 
      05-27-2004
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/NewsletterA...200309so_l.asp

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


"Tim Marsden" <(E-Mail Removed)> wrote in message
news:Om$(E-Mail Removed)...
> 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" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > 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?
>
>



 
Reply With Quote
 
Tim Marsden
Guest
Posts: n/a
 
      05-27-2004
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]" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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/NewsletterA...200309so_l.asp
>
> --
> I hope this helps,
> Steve C. Orr, MCSD, MVP
> http://Steve.Orr.net
>
>
> "Tim Marsden" <(E-Mail Removed)> wrote in message
> news:Om$(E-Mail Removed)...
> > 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" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> > > 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?
> >
> >

>
>



 
Reply With Quote
 
Eric Marvets
Guest
Posts: n/a
 
      05-27-2004
You can use System.Runtime.InteropServices.Marshal.ReleaseComO bject(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 http://www.velocityreviews.com/forums/(E-Mail Removed) for Information on Our
Architecture and Mentoring Services

</shameless self promotion>


 
Reply With Quote
 
Tim Marsden
Guest
Posts: n/a
 
      05-27-2004
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" <(E-Mail Removed)> wrote in message
news:%239ogba$(E-Mail Removed)...
> You can use System.Runtime.InteropServices.Marshal.ReleaseComO bject(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 (E-Mail Removed) for Information on Our
> Architecture and Mentoring Services
>
> </shameless self promotion>
>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Do vector iterators remain valid after resize() if base pointer ofelements remains unchanged? zr C++ 18 03-28-2009 11:19 AM
Excel instance remains after closing, calling GC, setting to null John Bailo ASP .Net Web Services 1 02-23-2007 02:49 AM
After making a AJAX request from .js file the readystate propertyof the Http object is not changing (remains constantly @ 1) Mathan Babu ASP .Net 0 09-19-2006 09:09 AM
File remains in use after calling close dmitryr@visto.com Java 3 05-01-2005 06:50 AM
IWAM_machinename account registry hive remains loaded evan after IISReset \Rob\ ASP .Net 0 05-10-2004 02:06 PM



Advertisments