我正在编写一段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到1000000之间的整数转换为字符串。但是,PowerShell需要6.75秒,而Python只需要0.37秒,使得Python快18倍。在我正在编写的实际PowerShell脚本中,将所有整数转换为字符串需要大约三个小时,因此18倍的速度提高将会受到欢迎。
在PowerShell 2中有更快的将int转换为string的方法吗?
range()
在这种情况下比PowerShell的..
运算符快得多)。你究竟想要实现什么? - Mathias R. Jessen(Measure-Command {(5).ToString()}).TotalMilliseconds
仍然返回0.0472,而start=time.perf_counter()
,str(5)
,print(time.perf_counter() - start)
打印1.995030623720074e-05。 - wecsam"$i"
进行转换时,可以节省一秒钟的时间。我同意最好看到您实际的代码实现。在v5中只需要1.5秒。 - Matt