簡體   English   中英

查找集合是否比 C# 中的元組列表更快、更優化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM