多くの整数を文字列に変換する必要があるPowerShellスクリプトを書いています。次のように、ToString
メソッドを使用してこれを実行しています。
$i = 5
$i.ToString()
残念ながら、これは非常に遅いようです(実行ポリシーの警告は省略しました)。
PS I:\ADCC\Scripting Performance> .\int_to_str.ps1
6.747561
PS I:\ADCC\Scripting Performance> .\int_to_str.py
0.37243021680382793
PowerShell 2とPython 3.を使用しています。
PS I:\ADCC\Scripting Performance> $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PS I:\ADCC\Scripting Performance> python --version
Python 3.6.1
これはint_to_str.ps1
の内容です:
(Measure-Command {
ForEach($i in 1..1000000){
$i.ToString()
}
}).TotalSeconds
これはint_to_str.py
の内容です:
#!/usr/bin/env python3
import time
start = time.perf_counter()
for i in range(1, 1000000):
str(i)
print(time.perf_counter() - start)
ご覧のとおり、どちらのスクリプトも1から1,000,000の整数を文字列に変換します。ただし、PowerShellは6.75秒かかりますが、Pythonは0.37秒しかかかりません。Pythonが18倍速くなります。私が書いている実際のPowerShellスクリプトでは、すべての整数を文字列に変換するのに約3時間かかるので、18倍の速度の改善は歓迎されます。
PowerShell 2でint
をstring
に変換するより速い方法はありますか?
.NET(PowerShellで使用しているもの)でさえ、あなたの質問に答えるために、関心のあるint-> string変換に関するすばらしい記事を以下に示します。 http://cc.davelozinski.com/c-sharp/fastest-way-to-convert-an-int-to-string 。
ADからのバイト配列変換に関する限り、これは私が行ったテストであり、[string[]]
への明示的なキャストにより、ほとんど常に.tostring()を使用した場合の利点が見られました。ゲインは50%から同等の範囲でしたが、一貫して高速でした。
$s = [adsisearcher]'(&(objectCategory=user)(samaccountname=mysam))'
$r = @($s.FindAll())
(Measure-Command {
foreach ($b in $r[0].Properties.userpassword[0]) {
$b.tostring()
}
}).TotalSeconds
(Measure-Command {
[string[]]$r[0].Properties.userpassword[0]
}).TotalSeconds
私は@ thepip3rの回答を受け入れましたが、質問のコメントから他のいくつかの可能な解決策を強調したいと思います。
$i.ToString()
の代わりに"$i"
を使用できます。速いです。コメントにさらにソリューションが表示されたら、これを編集します。