var tmpList = new HashSet<int>(listId);
var filterItems = listObj.Where(x => tmpList.Contains(x.Id));
这可能会给您带来性能提升或性能下降,这在很大程度上取决于listObj
和listId
.
您将需要对其进行分析,以查看您是否从中获得任何改进。
解释提升或下降:
我将使用一些非常夸张的数字来使数学更容易,让我们说以下
listObj.Where(x => listId.Contains(x.Id));
每行需要 5 秒。
listObj.Where(x => tmpList.Contains(x.Id))
每行需要 2 秒。
var tmpList = new HashSet<int>(listId);
构建需要 10 秒。
让我们绘制出处理随行数变化的数据所需的时间listObj
+----------------+-----------------------------+- ---------------------------------+
| 行数 | 处理列表的秒数 | 使用哈希集处理的秒数 |
+----------------+-----------------------------+- ---------------------------------+
| 1 | 5 | 12 |
| 2 | 10 | 14 |
| 3 | 15 | 16 |
| 4 | 20 | 18 |
| 5 | 25 | 20 |
| 6 | 30 | 22 |
| 7 | 35 | 24 |
| 8 | 40 | 26 |
+----------------+-----------------------------+- ---------------------------------+
因此,您可以查看 listObj 是否有 1 到 3 行,您的旧方法更快,但是一旦您有 4 行或更多行,新方法会更快。
(注意我完全编造了这些数字,我可以保证 HashSet 的每行比 List 的每行快,但我不能告诉你快多少。你需要测试一下你是否获得更好的性能是 4 行或 4,000 行。知道的唯一方法是尝试两种方式并测试。)