这篇文章主要介绍了C# DataTable数据遍历优化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
我们在进行开发时,会经常使用DataTable来存储和操作数据,我发现在遍历DataTable并对数据进行删除和添加操作时速度非常慢,查阅相关资料并测试在添加主键后可以使遍历和操作速度提高很多:
测试代码,测试的是我们向取出来数据满足Flag!=1条件的所有数据的后面添加一条数据(因为这条数据的一些字段值是根据前面的几条满足条件[“AccID='” + accID + “' AND Y='” + year + “' AND AbsID <= ” + absID;]数据的值累加得到的)所以需要进行整个DataTable的遍历来计算添加:
public static void Test2()
{
Stopwatch watch = new Stopwatch();
using (DbConnection conn = SqlHelper.GetConnection("ConnectionString"))
{
using (SqlCommand cmd = new SqlCommand())
{
watch.Start();
cmd.CommandText = string.Format(@"
select ROW_NUMBER() OVER (Order by S.AccID,S.CurrID,S.AbsID,S.Flag)AS RowNum,S.* from Test S
");
cmd.Connection = conn as SqlConnection;
cmd.CommandTimeout = 60000;
conn.Open();
DataTable table = ExecuteDataTable(cmd);
watch.Stop();
Console.WriteLine("从数据库取出数据{0}条", table.Rows.Count);
Stopwatch watch2 = new Stopwatch();
watch2.Start();
DataTable newTable = HandleAccYear(table,true);
watch2.Stop();
Console.WriteLine("数据{0},遍历操作时间:毫秒:{1},秒:{2}", newTable.Rows.Count, watch2.ElapsedMilliseconds, watch2.ElapsedMilliseconds / 1000);
}
conn.Close();
}
}
填充数据到DataTable的方法
public static DataTable ExecuteDataTable(SqlCommand cmd)
{
DataTable table = new DataTable();
SqlDataAdapter adaper = new SqlDataAdapter(cmd);
adaper.Fill(table);
return table;
}
private static DataTable HandleAccYear(DataTable dt, bool isCurrency)
{
DataTable newdt = dt.Clone();
//不使用主键
//dt.PrimaryKey = new DataColumn[] {
// dt.Columns["AccID"],
// dt.Columns["Flag"],
// dt.Columns["AbsID"],
// dt.Columns["RowNum"],
/
沃梦达教程
本文标题为:C# DataTable数据遍历优化详解
猜你喜欢
- user32.dll 函数说明小结 2022-12-26
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- Oracle中for循环的使用方法 2023-07-04
- c# 模拟线性回归的示例 2023-03-14
- .NET CORE DI 依赖注入 2023-09-27
- Unity3D实现渐变颜色效果 2023-01-16
- 如何使用C# 捕获进程输出 2023-03-10
- Unity Shader实现模糊效果 2023-04-27
- WPF使用DrawingContext实现绘制刻度条 2023-07-04