C# 数据集行/列查找的速度?
最近,我不得不用存储在数据集中的数据做一些非常繁重的处理工作。它很重,以至于我最终使用了一个工具来帮助识别代码中的一些瓶颈。当我分析瓶颈时,我注意到,尽管数据集查找并不是非常慢(它们不是瓶颈),但比我预期的要慢。我总是假设数据集使用某种哈希表样式的实现,这将使查找成为O(1)(或者至少我认为哈希表就是这样)。我的查找速度似乎比这要慢得多 我想知道是否有人知道.NET的DataSet类的实现,愿意分享他们所知道的 如果我这样做:C# 数据集行/列查找的速度?,c#,.net,optimization,datatable,C#,.net,Optimization,Datatable,最近,我不得不用存储在数据集中的数据做一些非常繁重的处理工作。它很重,以至于我最终使用了一个工具来帮助识别代码中的一些瓶颈。当我分析瓶颈时,我注意到,尽管数据集查找并不是非常慢(它们不是瓶颈),但比我预期的要慢。我总是假设数据集使用某种哈希表样式的实现,这将使查找成为O(1)(或者至少我认为哈希表就是这样)。我的查找速度似乎比这要慢得多 我想知道是否有人知道.NET的DataSet类的实现,愿意分享他们所知道的 如果我这样做: DataTable dt = new DataTable(); if
DataTable dt = new DataTable();
if(dt.Columns.Contains("SomeColumn"))
{
object o = dt.Rows[0]["SomeColumn"];
}
Contains(…)
方法的查找时间和检索要存储在对象o
中的值的查找时间有多快?我本以为它会像哈希表一样快(假设我对哈希表的理解是正确的),但它看起来不像
我是从内存中编写代码的,所以有些东西可能“语法不正确”。我认为任何查找都是O(n),因为我认为它们不会使用任何类型的哈希表,但实际上会使用更多的数组来查找行和列。事实上,我相信列名存储在哈希表中。对于区分大小写的查找,应为O(1)或常量查找。如果它必须查看每个列,那么当然是O(n)。实际上,在引用列时建议使用整数,这可以大大提高性能。为了便于管理,可以声明常量整数。所以你可以做的不是你所做的,而是你所能做的
const int SomeTable_SomeColumn = 0;
DataTable dt = new DataTable();
if(dt.Columns.Contains(SomeTable_SomeColumn))
{
object o = dt.Rows[0][SomeTable_SomeColumn];
}
通过DataRow[“ColumnName”]的步骤包括: