[英]Is the Lookup collection faster and more optimized than List of tuples in C#?
Lookup<string, string>
vs List<(string, string)>
? 使用foreach
循環哪個更快?
如果您不需要搜索特定的鍵值對列表(鍵可能重復),那么使用元組List
會更慢嗎? 除了方法之外,查找還有其他好處嗎?
編輯:
非常聰明的評論提到了這一點,我應該將它添加到戰斗中:
Lookup<string, string>
vs List<(string, string)>
vs Dictionary<string, List<string>>
使用
foreach
循環哪個更快?
要迭代,列表將快幾個數量級。 只需看一下Lookup.GetEnumerator()
function 以及它正在做多少工作,因為它不會將原始元素存儲在列表中:
public IEnumerator<IGrouping<TKey, TElement>> GetEnumerator() {
Grouping g = lastGrouping;
if (g != null) {
do {
g = g.next;
yield return g;
} while (g != lastGrouping);
}
}
我實際上坐下來為它寫了一個基准:
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.17763.1282 (1809/October2018Update/Redstone5)
Intel Core i7-8850H CPU 2.60GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=5.0.100-preview.4.20258.7
[Host] : .NET Core 3.1.4 (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT [AttachedDebugger]
DefaultJob : .NET Core 3.1.4 (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT
| Method | n | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|----------- |------- |---------------:|-------------:|-------------:|---------:|------:|------:|----------:|
| LookupTest | 100 | 2,733.6 ns | 25.08 ns | 22.23 ns | 0.8583 | - | - | 4048 B |
| ListTest | 100 | 263.6 ns | 1.54 ns | 1.20 ns | - | - | - | - |
| LookupTest | 1000 | 27,185.6 ns | 245.01 ns | 217.20 ns | 8.4839 | - | - | 40048 B |
| ListTest | 1000 | 2,306.6 ns | 22.53 ns | 19.97 ns | - | - | - | - |
| LookupTest | 10000 | 274,364.4 ns | 5,041.13 ns | 6,554.89 ns | 84.9609 | - | - | 400048 B |
| ListTest | 10000 | 22,903.7 ns | 178.62 ns | 158.34 ns | - | - | - | - |
| LookupTest | 100000 | 2,774,880.1 ns | 49,165.10 ns | 58,527.55 ns | 847.6563 | - | - | 4000008 B |
| ListTest | 100000 | 231,208.2 ns | 4,449.43 ns | 4,369.93 ns | - | - | - | - |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.