Poor Update Performance using OracleDataAdapter
Posted: Fri  18 Oct 2013 15:52
				
				Hi there,
I'm finding that I get extremely low update performance from dotConnect for oracle when performing a large number of updates (about 5500 rows of about 15-20 columns). The update takes around 100 seconds to complete whereas performing exactly the same process using ODP.net takes around 10!
After doing some digging I have determined that both ODP and dotConnect are issuing nearly identical DML statements so it doesn't appear to be Database or Oracle Client-related.
There does appear to be something odd in that when I call the OracleDataAdapter.Update(DataTable) method to apply my changes there occur many "handled" ArgumentExceptions originating in DevArt & Framework code for every row of data. This doesn't happen for ODP and I assume is where there is a large performance penalty.
This does seem to have been raised before and I've encountered it in both 7.8 and 8.0 of dotConnect for Oracle.
Any Ideas?
-Antony
Here are a couple of examples:
			I'm finding that I get extremely low update performance from dotConnect for oracle when performing a large number of updates (about 5500 rows of about 15-20 columns). The update takes around 100 seconds to complete whereas performing exactly the same process using ODP.net takes around 10!
After doing some digging I have determined that both ODP and dotConnect are issuing nearly identical DML statements so it doesn't appear to be Database or Oracle Client-related.
There does appear to be something odd in that when I call the OracleDataAdapter.Update(DataTable) method to apply my changes there occur many "handled" ArgumentExceptions originating in DevArt & Framework code for every row of data. This doesn't happen for ODP and I assume is where there is a large performance penalty.
This does seem to have been raised before and I've encountered it in both 7.8 and 8.0 of dotConnect for Oracle.
Any Ideas?
-Antony
Here are a couple of examples:
Code: Select all
Message: "Input String was not in correct format"
Stak: 
 	mscorlib.dll!System.Number.StringToNumber	
 	mscorlib.dll!System.Number.ParseInt32	
 	mscorlib.dll!string.System.IConvertible.ToInt32	
 	mscorlib.dll!System.Convert.ChangeType	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleUtils.a	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.OracleDbType.set	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.DbType.set	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.CreateParameterForNullTest	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.BuildWhereClause	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.BuildUpdateCommand	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandlerBuilder	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandler	
 	Devart.Data.dll!Devart.Common.DbCommandBuilder.RowUpdatingHandler	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleCommandBuilder.a	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleDataAdapter.OnRowUpdating	
 	System.Data.dll!System.Data.Common.DbDataAdapter.Update	
 	System.Data.dll!System.Data.Common.DbDataAdapter.UpdateFromDataTable	
 	System.Data.dll!System.Data.Common.DbDataAdapter.Update	
Message: Invalid cast from 'DateTime' to 'Int32'
Stack: 
 	mscorlib.dll!System.DateTime.System.IConvertible.ToInt32	
 	mscorlib.dll!System.Convert.ChangeType	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleUtils.a	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.OracleDbType.set	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleParameter.DbType.set	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.CreateParameterForNullTest	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.BuildWhereClause	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.BuildUpdateCommand	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandlerBuilder	
 	System.Data.dll!System.Data.Common.DbCommandBuilder.RowUpdatingHandler	
 	Devart.Data.dll!Devart.Common.DbCommandBuilder.RowUpdatingHandler	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleCommandBuilder.a	
 	Devart.Data.Oracle.dll!Devart.Data.Oracle.OracleDataAdapter.OnRowUpdating	
 	System.Data.dll!System.Data.Common.DbDataAdapter.Update	
 	System.Data.dll!System.Data.Common.DbDataAdapter.UpdateFromDataTable	
 	System.Data.dll!System.Data.Common.DbDataAdapter.Update