Re: Weird exception thrown

Eddie Lascu <[email protected]>
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Organization IBI Group
Message-ID <[email protected]>
Thanks for the suggestion. I wrapped all "OracleClass objOracleObject = new
OracleClass();" lines of code in "using" statements. I hope this will help.
Regards,
Eddie



-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[email protected]] On Behalf Of Marc Brooks
Sent: Monday, January 12, 2009 3:37 PM
To: [email protected]
Subject: Re: [ADVANCED-DOTNET] Weird exception thrown

Frans is 100% correct as to the cause of the problem. You MUST call Dispose
on all objects coming out of the Oracle provider. I recommend the use of the
"using" statement to insure it's always done.

Marc

On Fri, Jan 9, 2009 at 11:11, Frans Bouma <[email protected]> wrote:
>> I have an application that reads an XML file, parses it and saves its 
>> data into an Oracle database. The save is actually an insert, if the 
>> record doesn't exist or an update if the record exists. In order to 
>> figure out which operation I have to perform, I execute a select, to 
>> check whether
> the
>> record is already in the database. I build the Select SQL statement,
> create
>> an Oracle Command object with it and then call its Execute Reader method.
>> This method returns an OracleDataReader object and for that, all I 
>> care to check is to see whether it has any records. The 
>> OracleDataReader class has
> a
>> property called "HasRows" that will tell me just that.
>> I know what you are thinking: I should ask this question on a 
>> different forum, like one Oracle hosts for their ODP.NET development, 
>> but bare with
> me
>> for a second.
>> After running for 2-3 days continuously, my application starts 
>> throwing
> this
>> weird exception where it says that "Memory could not be allocated". I 
>> managed to trace the raise of the exception to the invocation of the 
>> "HasRows" property for the OracleDataReader object. The problem is 
>> that, looking at the documentation, that property is not raising any 
>> exceptions, so what the heck is going on.
>> To keep things under control, I even tried to kick in the garbage
> collection
>> (GC.Collect()) myself, every now and then. Now the exception takes 
>> longer
> to
>> be triggered, but eventually it is triggered.
>> Can anyone give me some ideas as to what else to try and figure out 
>> what
> the
>> problem is? The XML files are not really big, averaging around 100 kB
> each.
>> When the exception is triggered, I look ion the task manager and 
>> Physical Memory usage is nowhere near the top.
>> Any suggestion will be highly appreciated.
>
>        Oracle's ODP.NET is actually a wrapper around their java CLI 
> code, so it has unmanaged elements everywhere, even OracleParameter 
> objects have unmanaged elements.
>
>        This means that you have to call Dispose() on
> - OracleParameter
> - OracleDataReader
> - OracleCommand
> - OracleConnection
>
>        It's not enough to call Dispose on OracleConnection or 
> OracleCommand, nor is it enough to call Close on OracleDataReader.
>
>        If you don't do this, you'll get subtle memory leaks which 
> eventually will bring the system down.
>
>        As you're using Oracle, you can do without the select however, 
> use the MERGE statement:
> http://www.fast-track.cc/10g_166.htm
>        If you're on 9i you can use an upsert:
> http://www.praetoriate.com/oracle_tips_upserts.htm
>        If you're on an even older dinosaur (poor sod ;)), you're out 
> of luck and will have to use the select separately.
>
>        Good luck.
>
>                FB
>
>
> ----------------------------------------------------------------------
> -- Lead developer of LLBLGen Pro, the productive O/R mapper for .NET 
> LLBLGen Pro website: http://www.llblgen.com My .NET blog: 
> http://weblogs.asp.net/fbouma Microsoft MVP (C#)
> ----------------------------------------------------------------------
> --
>
>
>
>
>
> ===================================
> View archives and manage your subscription(s) at 
> http://peach.ease.lsoft.com/archives
>



--
Marc C. Brooks
http://musingmarc.blogspot.com

NOT sent from an iPhone

===================================
View archives and manage your subscription(s) at
http://peach.ease.lsoft.com/archives

===================================
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.