这篇文章主要介绍了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数据遍历优化详解


基础教程推荐
猜你喜欢
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C# 解析XML和反序列化的示例 2023-04-14
- C#中的Linq to JSON操作详解 2023-06-08
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- 实例详解C#实现http不同方法的请求 2022-12-26
- Unity shader实现高斯模糊效果 2023-01-16