【发布时间】:2010-10-23 17:14:54
【问题描述】:
推荐
while (reader.Read())
{
table.Rows.Add(
new object[] { reader[0], reader[1], reader[2], reader[3] }
);
table.AcceptChanges();
}
或
while (reader.Read())
{
table.Rows.Add(
new object[] { reader[0], reader[1], reader[2], reader[3] }
);
}
table.AcceptChanges();
注意 table.AcceptChanges 的放置位置。
编辑 1
这里是代码块:
protected void Page_Load(object sender, EventArgs e)
{
IDataReader reader = cust.GetCustomerOrderSummary("99999");
using (DataSet ds = new DataSet())
{
using (DataTable table =
new DataTable { TableName = "OrderSummary" })
{
DataColumn idColumn = table.Columns.Add("number", typeof(int));
table.Columns.Add("name", typeof(string));
table.Columns.Add("quantity", typeof(int));
table.Columns.Add("prev_quantity", typeof(int));
table.PrimaryKey = new DataColumn[] { idColumn };
while (reader.Read())
{
table.Rows.Add(
new object[]{ reader[0], reader[1], reader[2], reader[3] }
);
table.AcceptChanges();
}
ds.Tables.Add(table);
rptCustomerOrder report =
new rptCustomerOrder { DataSource = ds };
ReportViewer1.Report = report;
}
}
}
编辑 2
在阅读了 MSDN 文章 here 之后,我决定根据以下语句(来自文章)将 AcceptChanges() 放在循环之外:
在 DataTable 级别调用 AcceptChanges 会导致调用每个 DataRow 的 AcceptChanges 方法。
【问题讨论】:
-
AcceptChanges 的成本是多少?是零成本吗?那么就无所谓了吗?如果 AcceptChanges 的成本不为零(即,它需要时间、I/O 或其他什么),那么它很重要。
标签: .net optimization datatable dataset