Page 1 of 1

Are OracleLobs buffered or streamed?

Posted: Wed 15 Sep 2010 12:02
by rdingwall
Hi, I was wondering, if I load a 100MB file into an OracleLob for an INSERT, will that 100MB be buffered locally in memory first, or streamed directly from disk over the network to Oracle?

And is it the same behaviour for SELECTs via OracleDataReader.GetOracleLob()?

Posted: Wed 15 Sep 2010 12:18
by rdingwall
Actually, it seems like yes, it is buffered locally for writing but not for reading. With a simple test app and a 1GB BLOB:
  • INSERT using FileStream.CopyTo(OracleLob) and with a 1GB BLOB it spiked up to 1.6GB of memory for an INSERT
  • SELECT using reader.GetOracleLob().CopyTo(fileStream) memory stayed under 10MB

Posted: Fri 17 Sep 2010 10:14
by StanislavK
We will analyze the possibility of writing Oracle LOBs into the database without buffering them in memory. We will inform you about the results of our investigation.

Posted: Wed 12 Jan 2011 17:13
by StanislavK
We have implemented the possibility of changing the OracleLob.Cached property, which specifies whether the whole LOB will be stored in the memory. This feature is available in in the new 6.0.86 version of dotConnect for Oracle. This build can be downloaded from
http://www.devart.com/dotconnect/oracle/download.html
(the trial version) or from Registered Users' Area (for users with active subscription only):
http://secure.devart.com/

For the detailed information about the fixes and improvements available in this build, please refer to
http://www.devart.com/forums/viewtopic.php?t=19968