linq与ToDictionary()和TryGetValue()——哪个更有效?

本文关键字:有效 TryGetValue ToDictionary linq | 更新日期: 2023-09-27 18:11:09

这两种方法哪一种更有效

object foundItem = (from m in myList where m.ID == id select m).FirstOrDefault();

Dictionary<string, object> dict = myList.ToDictionary(m => m.ID, m => m);
dict.TryGetValue(id, out foundItem);

linq与ToDictionary()和TryGetValue()——哪个更有效?

如果你只做一次查找,非字典查找会更快,因为它避免了构建字典的开销。

如果你要在同一个数据集上做很多查找,字典会更快,因为它是一种专门为单键快速查找而设计的数据结构。查找的次数越多,构建字典的开销就越值得。

除了已经指出的内容之外,这两个代码块并不完全做相同的事情。在第一个例子中,'found'将是一个IEnumerable,在第二个例子中,它将是一个bool值,而foundItem将是存储在myList中的任何值。

我猜您的第一个将是最快的,因为它很可能不需要遍历整个列表。我稍微修改一下,让它看起来像这样:

object found = myList.FirstOrDefault(m => m.ID == id);

当我有一个大列表和很多TryGetValues时,我使用第二种方法。

我的经验是,在这些条件下,这个速度要快得多。

第一个对于单个查找来说更快。

我从来没有使用秒表或类似的东西来证明它,所以我不能告诉你盈亏平衡点在哪里。