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()?
Are OracleLobs buffered or streamed?
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
-
- Devart Team
- Posts: 1710
- Joined: Thu 03 Dec 2009 10:48
-
- Devart Team
- Posts: 1710
- Joined: Thu 03 Dec 2009 10:48
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
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