Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据集关系或linq搜索以获得更好的性能?_C#_Linq_Dataset - Fatal编程技术网

C# 数据集关系或linq搜索以获得更好的性能?

C# 数据集关系或linq搜索以获得更好的性能?,c#,linq,dataset,C#,Linq,Dataset,我们有两张桌子: 家长 ID:Integer//主键 名称:字符串 孩子 FK:Integer//对父.ID的引用 MoreInfo:String 父级有100000行,子级有10000行(父级中的许多行不用于子级) 目前我们有: MyDS.Relations.Add("PC", MyDS.Tables["Parent"].Columns["ID"], MyDS.Tables["Child"].Columns["FK"]); foreach (D

我们有两张桌子:
家长
ID:Integer//主键
名称:字符串

孩子
FK:Integer//对父.ID的引用
MoreInfo:String

父级有100000行,子级有10000行(父级中的许多行不用于子级)

目前我们有:

MyDS.Relations.Add("PC", MyDS.Tables["Parent"].Columns["ID"],
                         MyDS.Tables["Child"].Columns["FK"]);
foreach (DataRow drChild in MyDS.Tables["Child"].AsEnumerable())
  DataRow drParent = drChild.GetParentRows(MyDS.Relations["PC"]).FirstOrDefault();
我们正在考虑更改为仅使用Linq手动搜索:

foreach (DataRow drChild in MyDS.Tables["Child"].AsEnumerable())
  DataRow drParent = MyDS.Tables["Parent"].AsEnumerable().FirstOrDefault(
                                   drParent => drParent["ID"] == drChild["FK"]);

表子级只迭代一次,然后处理数据集。任何人都有使用一种方法或另一种方法的经验-如果只使用一次,用方法1建立关系是浪费时间吗?

建立关系绝对不是浪费时间

每当评估一个问题的两个潜在解决方案时,您应该始终比较每个选项的成本/时间。从那里你通常可以打电话决定哪个选择更好。需要记住的一点是,DataRelation的存在是为了优化这些类型的查找

如果要将DataRelation添加到现有表中,则需要大约125ms来添加该关系(创建所需的哈希以通过Datakeys映射父/子行)

使用DataRelation查找10000个子行中每一行的每一个父行只需要70ms,而仅使用上面记录的Linq方法需要4分钟


仔细想想,这是有意义的,因为第一个将迭代10000个子行,并使用DataRelation的映射数据键查找父行(不需要迭代所有100000个父行)。但是,第二个解决方案必须遍历每个子行(10000)并搜索100000个父行以找到合适的匹配项(10000 x 100000=100000000)。

创建关系绝对不是浪费时间

每当评估一个问题的两个潜在解决方案时,您应该始终比较每个选项的成本/时间。从那里你通常可以打电话决定哪个选择更好。需要记住的一点是,DataRelation的存在是为了优化这些类型的查找

如果要将DataRelation添加到现有表中,则需要大约125ms来添加该关系(创建所需的哈希以通过Datakeys映射父/子行)

使用DataRelation查找10000个子行中每一行的每一个父行只需要70ms,而仅使用上面记录的Linq方法需要4分钟

仔细想想,这是有意义的,因为第一个将迭代10000个子行,并使用DataRelation的映射数据键查找父行(不需要迭代所有100000个父行)。但是,第二个解决方案必须遍历每个子行(10000)并搜索100000个父行以找到合适的匹配项(10000 x 100000=100000000)