Tabela de dados ADO.NET x leitor de dados

O DataReader é mais eficiente que um DataTable se você precisar apenas mostrar dados, mas não manipulá-los. No entanto, para obter um DataReader da camada de acesso a dados, devo deixar o objeto de conexão aberto? Eu acho que esse também é um problema de eficiência muito grande. Então, existe outra abordagem para tirar proveito do DataReader?