大量にデータベースを読んで、大量にデータベースに書き戻す処理があるんですが、それをDataReaderでバッチ処理のようにやっています。パフォーマンスを上げようと思って調べていたんですが、
int hoge = (int)myDataReader["hogehoge"];
と書くなら、以下のようにGetInt32のようなGetxxxシリーズを使った方が、パフォーマンス的に良いようですね。なぜなら、毎回hogehogeの列名で探しに行くからだそうです。
int hoge = myDataReader.GetInt32(1);
ここで気になるのは、直接インデックスを書いているんでその保守性ですが、DataReaderを使って値を読むような場合は、大抵自分でselect文を書いて読んでいるだろうから、将来select文が変わってインデックスがずれることはあまり心配しなくてもいいのかもしれません。
どうしても気になるなら、GetOrdinalを使えば、列名からインデックスが得られるので、以下のようにしておけば良いでしょう。
int index = myDataReader.GetOrdinal("hogehoge");
while (myDataReader.Read())
{
int hoge = myDataReader.GetInt32(index);
・
・
・
}
あと、以下のページも参考になります。
チェックリスト: ADO.NET パフォーマンス
http://www.microsoft.com/japan/msdn/enterprise/pag/scalenetcheck01.asp