Quando você estiver utilizando dataReader, eventualmente você acessará os campos deste dataReader sequencialmente. Quer dizer, 1º campo, 2º campo, etc...

 

Se isso acontecer, então considere a possibilidade de fazer uso do commandBeheavior.SequentialAccess quando for utilizar o ExecuteReader. Com este CommandBehavior o DataReader é avisado de que o acesso é sequencial e isso gera uma maior otimização no processamento.

 

Mas não use esta opção caso vá acessar os campos aleatoriamente, 3º, 1º, 2º, etc.

 

Veja como fica a abertura do dataReader:

 

 dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)

  

Com essa opção ganha-se performance, mas o acesso as colunas realmente precisa ser sequencial. Por exemplo, depois de acessar a coluna 2 de um registro, você não pode mais acessar a coluna 1.