gpt4 book ai didi

.net - 在 SortedList 中循环 - 为什么这样更快?

转载 作者:行者123 更新时间:2023-12-04 17:05:40 25 4
gpt4 key购买 nike

以下示例中的 List1 是一个 SortedList(Of MyClass),包含 251 个成员。

前两个代码块在 15.5 秒内执行。

 For cnt As Integer = 1 To 1000000
For Each TempDE In List1
Dim F As String = TempDE.Key
TempDE.Value.x1 = 444
Next
Next
    For cnt As Integer = 1 To 1000000
For Each TempDE As KeyValuePair(Of String, phatob) In List2
Dim F As String = TempDE.Key
TempDE.Value.x1 = 444
Next
Next

这个在 5.6 秒内执行。
    For cnt As Integer = 0 To 999999
For cnt2 As Integer = 0 To 250
Dim F As String = List1.Keys(cnt2)
List1.Values(cnt2).x1 = 444
Next

Next

为什么前两个代码块这么慢?

最佳答案

SortedList 通过实现 IComparer 来扩展 Collection 以提供排序功能。在内部,它实现了 2 个数组来存储列表的元素——一个数组用于键,一个数组用于值。 .NET 数组针对快速有序和快速随机访问进行了优化。

我怀疑为什么前 2 个很慢是因为 SortedList 中的 foreach 语句是 Enumerator 的包装器。调用 foreach 将查询枚举数,调用 MoveNext 和 Current。此外,遍历通用列表可能会在遍历列表时涉及装箱和拆箱,并且可能会产生通常通过 Index 访问不会获得的性能开销。

关于.net - 在 SortedList 中循环 - 为什么这样更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658973/

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