Return to HomePage



Checklist: ADO.NET Performance

Source: http://msdn.microsoft.com/library/en-us/dnpag/html/scalenetcheck01.asp

J.D. Meier, Srinath Vasireddy, Ashish Babbar, Rico Mariani, and Alex Mackman

Design Considerations

* Design your data access layer based on how the data is used.
* Cache data to avoid unnecessary work.
* Connect by using service accounts.
* Acquire late, release early.
* Close disposable resources.
* Reduce round trips.
* Return only the data you need.
* Use Windows authentication.
* Choose the appropriate transaction type.
* Use stored procedures.
* Prioritize performance, maintainability, and productivity when you choose how to pass data across layers.
* Consider how to handle exceptions.
* Use appropriate normalization.
* Dispose issues

Microsoft® .NET Framework Data Providers

* Use System.Data.SqlClient for Microsoft SQL Serverâ„¢ 7.0 and later.
* Use System.Data.OleDb for SQL Server 6.5 or OLE DB providers.
* Use System.Data.ODBC for ODBC data sources.
* Use System.Data.OracleClient for Oracle.
* Use SQLXML managed classes for XML data and SQL Server 2000.

Connections

* Open and close the connection in the method.
* Explicitly close connections.
* When using DataReaders, specify CommandBehavior.CloseConnection.
* Do not explicitly open a connection if you use Fill or Update for a single operation.
* Avoid checking the State property of OleDbConnection.
* Pool connections.

Commands

* Validate SQL input and use Parameter objects.
* Retrieve only the columns and rows you need.
* Support paging over large result sets.
* Batch SQL statements to reduce round trips.
* Use ExecuteNonQuery for commands that do not return data.
* Use ExecuteScalar to return single values.
* Use CommandBehavior.SequentialAccess for very wide rows or for rows with binary large objects (BLOBs).
* Do not use CommandBuilder at run time.

Stored Procedures

* Use stored procedures.
* Use CommandType.Text with OleDbCommand.
* Use CommandType.StoredProcedure with SqlCommand.
* Consider using Command.Prepare.
* Use output parameters where possible.
* Consider SET NOCOUNT ON for SQL Server.

Parameters

* Use the Parameters collection when you call a stored procedure.
* Use the Parameters collection when you build SQL statements.
* Explicitly create stored procedure parameters.
* Specify parameter types.
* Cache stored procedure SqlParameter objects.

DataReader

* Close DataReader objects.
* Consider using CommandBehavior.CloseConnection to close connections.
* Cancel pending data.
* Consider using CommandBehavior.SequentialAccess with ExecuteReader.
* Use GetOrdinal when using an index-based lookup.

DataSet

* Reduce serialization.
* Use primary keys and Rows.Find for indexed searching.
* Use a DataView for repetitive non-primary key searches.
* Use the optimistic concurrency model for datasets.

XML and DataSet Objects

* Do not infer schemas at run time.
* Perform bulk updates and inserts by using OpenXML.

Types

* Avoid unnecessary type conversions.

Exception Management

* Use the ConnectionState property.
* Use try/finally to clean up resources.
* Use specific handlers to catch specific exceptions.

Transactions

* Use SQL transactions for server controlled-transactions on a single data store.
* Use ADO.NET transactions for client-controlled transactions on a single data store.
* Use Distributed Transaction Coordinators (DTC) for transactions that span multiple data stores.
* Keep transactions as short as possible.
* Use the appropriate isolation level.
* Avoid code that can lead to deadlock.
* Set the connection string Enlist property to false.

Binary Large Objects

* Use CommandBehavior.SequentialAccess and GetBytes to read data.
* Use READTEXT to read from SQL Server 2000.
* Use OracleLob.Read to read from Oracle databases.
* Use UpdateText to write to SQL Server databases.
* Use OracleLob.Write to write to Oracle databases.
* Avoid moving binary large objects repeatedly.



Return to HomePage
Microsoft Communities