【发布时间】:2011-11-23 07:13:57
【问题描述】:
我正在涉足 Powershell 并且对 .NET 完全陌生。
我正在运行一个以空哈希表开头的 PS 脚本。哈希表将增长到至少 15,000 到 20,000 个条目。哈希表的键是字符串形式的电子邮件地址,值是布尔值。 (我只需要跟踪我是否看过电子邮件地址。)
到目前为止,我一直在一次增加一个哈希表条目。我检查以确保键值对不存在(在这种情况下 PS 会出错),然后添加该对。
这是我们正在讨论的我的代码部分:
...
if ($ALL_AD_CONTACTS[$emailString] -ne $true) {
$ALL_AD_CONTACTS += @{$emailString = $true}
}
...
我想知道从 PowerShell 或 .NET 的角度来看,如果您提前知道该哈希表将是巨大的(例如 15,000 到 20,000 个或更多条目),是否可以做任何事情来优化此哈希表的性能。
谢谢!
【问题讨论】:
-
哈希表是正确的结构吗?基本上,如果它在哈希表中,它的值为真,不是吗?
-
正确。键是电子邮件地址,值只是 $true。为了确定任意电子邮件地址是否在该集合中,有什么更有效的方法可以记住 15,000 个电子邮件地址?我认为哈希表是常数时间查找而不是数组。
-
我对 PowerShell 中的可用功能不够熟悉。在 .NET 中,我会选择 List
而不测量性能。在查找/插入时创建哈希需要时间,而且您也不需要存储“值”,因此这是不需要的操作。我不知道 List 的 O 因子,但如果性能至关重要,我会对其进行衡量。
标签: powershell hashtable powershell-2.0