gpt4 book ai didi

c# - 在数据表上添加主键

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:13 26 4
gpt4 key购买 nike

我一直在尝试通过向表中添加一个主键来使用 DataTable.Select 来提高性能,但仅 1200 行它仍然花费太多时间。使用和不使用主键的时间差异仅为 3-4 秒(对于 DataTable.Select)。

现在,据我所知,Linq 的性能肯定不受添加主键的影响。由于创建了 Datarow 集合数组,我认为这是瓶颈,因此性能对我来说毫无用处。

那么这里的主键有什么用呢?

最佳答案

A DataTable的主键确实在内部维护一个索引,与行顺序分开,你是对的 Select可以优化以将主键上的过滤器视为特例。不幸的是,这还没有完成,并且Select只需一条一条地检查所有记录,然后评估过滤器。

这仍然比您的 LINQ 版本慢的原因是因为您作为字符串传入的过滤器首先需要被解析,然后它被转换为表达式树(不是表达式树的 LINQ 版本),以及一个表达式然后评估员充当口译员。您的 LINQ 版本生成执行过滤的 CIL 代码,这些代码将在运行时转换为 native 代码。无需翻译。

您可以使用 DataRowCollection.Find 获得主键的好处:

var rows = lst.Select(key => dtsrc.Rows.Find(key)).Where(row => row != null).ToList();

如果lst可能包含重复键,您需要先删除它们。你可以使用 Enumerable.Distinct() 方法,或者您可以使用 HashSet<int>从一开始(如果您不关心行的顺序)。

(我之前声称无法优化 Select 方法,因为主键信息没有以任何方法可以使用的方式保存,但我错了,正如我现在的示例所示.)

关于c# - 在数据表上添加主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30051467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com