我正在重构一些旧的(ish)代码,并且我使用了两种方法来创建一些数组和有序字典,例如...
[Collections.Specialized.OrderedDictionary]@{}
和
New-Object Collections.Specialized.OrderedDictionary
我想知道这两种实例化数组和哈希表/字典的方法哪个更好? FWIW,我需要与PS2.0无关的最新版本的代码。性能是次要的问题。
FWIW,从性能的角度看,前者要好得多。我尝试过
Measure-Command {
foreach ($i in 1..10000) {
$array1 = [Collections.Specialized.OrderedDictionary]@{}
}
}
Measure-Command {
foreach ($i in 1..10000) {
$array2 = New-Object Collections.Specialized.OrderedDictionary
}
}
分别为34毫秒和278毫秒。当然,我不是在创建10K实例,性能也不是主要优先级,即使是优先级,也不是278毫秒性能较差。但是,即使最终结果实际上是相同的,但它确实显示出该过程存在很大差异。
答案 0 :(得分:0)
当我执行以下操作时:
cls
write-host "array1:"
$array1 = [System.Collections.Specialized.OrderedDictionary]@{}
$array1.GetType()
(Measure-Command -Expression {1..10000 | ForEach-Object { $array1.Add($_,"") }}).Milliseconds
write-host
write-host
write-host "array2:"
$array2 = New-Object System.Collections.Specialized.OrderedDictionary
$array2.GetType()
(Measure-Command -Expression {1..10000 | ForEach-Object { $array2.Add($_,"") }}).Milliseconds
例如,我得到以下内容,即我认为它们是同一类型,因此我不会期望有任何区别,性能或其他方面:
array1:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True OrderedDictionary System.Object
492
array2:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True OrderedDictionary System.Object
500
顺便说一句,从PS 3.0开始,$array3=[ordered]@{}
为您提供了相同的类型+++:
array3
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True OrderedDictionary System.Object
从PowerShell 3.0开始,您可以使用[ordered]属性来 创建有序词典 (System.Collections.Specialized.OrderedDictionary)在PowerShell中。