【发布时间】:2009-08-27 05:24:35
【问题描述】:
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 对象。根据 VS 2008 分析器,当我执行此操作时,大约 95% 的创建对象时间都在 da.Fill(ds) 调用中。
我还有一个类,它表示实现 IEnumerable 的这些对象的集合,当使用 foreach 迭代该对象时,每个单独的记录对象都是动态创建的,并且这些 da.Fill(ds) 语句很快就会累加。
我的问题是,这是获取单条记录的最佳方式吗?或者,是否有更优选的方式来实现集合对象,以便迭代它不会花费这么长时间?
谢谢
【问题讨论】:
-
谢谢!我尝试了建议的 OleDbDataReader 解决方案。不幸的是,在我的特定场景中,没有一个 DataReader 解决方案比使用 OleDbDataAdapter.Fill() 有明显的性能改进。