【发布时间】:2018-04-12 17:59:39
【问题描述】:
我有一封电子邮件的正文(此时在代码中,它只是一个字符串),以及我需要查找的一组单词。我正在尝试从单词数组中获取电子邮件中的单词数组。例如:
$wordsArray = "foo|bar|regex|powershell"
$emailBody = "This is an email body written into a string, without breaks. foo regex."
我希望从中收到
@("foo", "regex")
大小写无关紧要,顺序无关紧要,等等。
现在我有这个功能:
function func($emailBody, $wordsArray) {
$matched= @()
$matched+= $emailBody| Select-String $wordsArray -AllMatches | ForEach-Object { $_.Matches.Value }
return $matched | sort -Unique
}
但是,此功能以惊人的速度增长。我循环了多封电子邮件,第一次运行它是 0.05287 秒,第 30 次运行是 0.11733 秒,第 45 次运行是 1.72352 秒,第 50 次运行超过 5 秒。我必须运行 40,000 次(并且还在增长)。
有什么建议吗?
【问题讨论】:
-
您可以包含其余代码吗?我不明白为什么您发布的函数的运行时间会在多次使用时增加。
-
@ctwheels 我没有与任何网络邮件对象交互,在脚本的这一点上,它是一个原始字符串。你可以用“randomString”完全替换“email”,我也会有同样的问题。
-
@AxelPersinger 将该信息添加到您的问题中以防止进一步混淆
标签: arrays regex powershell