如何解决我可以提高我的 DataTable 和 List<> 迭代速度吗? C#
希望你们一切顺利。
我有一个关于迭代的快速问题。我已经阅读了几篇关于迭代速度的文章,但我不知道如何使我的迭代更快。目前我正在做这样的事情:
void Iteration()
{
//Creating and filling the datatable
DataTable dt = new DataTable();
dt.Columns.Add("Datetime",typeof(DateTime));
for (int i = 0; i < 150; i++)
{
DaTarow row = dt.NewRow();
row["Datetime"] = DateTime.Now.AddDays(i);
dt.Rows.Add(row);
}
//Creating and filling the list
List<DateTime> _listDates = new List<DateTime>();
DateTime _startDate = DateTime.Now.AddMonths(-1);
for(int i = 0; i < 250; i++)
_listDates.Add(_startDate.AddDays(i));
//Here's the actual iteration
foreach (DateTime _date in _listDates)
{
foreach (DaTarow row in dt.Rows)
{
if ((DateTime)row["Datetime"] == _date)
{
//Do something.........
}
}
}
}
我分别用 250 和 150 行/行填充 List<DateTime>
和 DataTable
。然后我想将两个值相互比较,并在匹配时做一些事情。但是,在我的方法中,这意味着 250 * 150 = 37500 次通过。现在我可以在匹配时打破循环,但这对我来说似乎微不足道,因为匹配也可以在列表和数据表的底部。在我的程序中,平均列表和表格有 2500 行。所以每 n 分钟就有数百万次传球。不得不说,这需要一段时间。我在单独的线程上运行此计算,以便我的程序保持响应。
有没有办法让它更智能和/或更快?我在正确的轨道上吗?
干杯,
解决方法
这个呢?这样效率更高,因为数据表和日期时间列表都只扫描一次,HashSet.Contains
时间复杂度为 O(1)。
void Iteration()
{
//Creating and filling the datatable
DataTable dt = new DataTable();
dt.Columns.Add("Datetime",typeof(DateTime));
for (int i = 0; i < 150; i++)
{
DataRow row = dt.NewRow();
row["Datetime"] = DateTime.Now.AddDays(i);
dt.Rows.Add(row);
}
//Creating and filling the list
List<DateTime> _listDates = new List<DateTime>();
DateTime _startDate = DateTime.Now.AddMonths(-1);
for (int i = 0; i < 250; i++)
_listDates.Add(_startDate.AddDays(i));
var dateSet = new HashSet<DateTime>(_listDates);
foreach (DataRow row in dt.Rows)
{
if (dateSet.Contains( (DateTime)row["Datetime"]))
{
//Do something.........
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。