C#, .Net 2.0: у меня есть класс, который упаковывает одну запись из базы данных, доступ к которой осуществляется через объект OleDbConnection. Это довольно просто, он выполняет "SELECT * FROM table WHERE key = {some value};" а затем предоставляет поля как свойства с несколькими методами для управления данными. Когда я создаю новый экземпляр этого объекта, выполняемый код выглядит так:
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Connection.Open();
}
da.Fill(ds);
return ds.Tables[0];
cmd — это объект OleDbCommand, передаваемый методу. Когда я выполняю это, около 95% времени, необходимого для создания объекта, приходится на вызов da.Fill(ds), согласно профилировщику VS 2008.
У меня также есть класс, представляющий набор этих объектов, который реализует IEnumerable, и при повторении этого объекта с использованием foreach каждый отдельный объект записи создается на лету, и эти операторы da.Fill(ds) быстро складываются.
Мой вопрос: это лучший способ получить одну запись? С другой стороны, есть ли более предпочтительный способ реализации объекта коллекции, чтобы итерация не занимала так много времени?
Спасибо