自从上周翻译了几篇PowerShell性能优化的文章以后,在我每次动手写脚本时,文中的观点都会像夏天麦田中的蚱蜢一样,跳来跳去。但是过分的优化会降低生产效率,甚至一不留神,还会掉入陷阱。
比如,我在用-repace中的操作符时,突然想到了.NET中也有string类的replace方法,于是把二者进行了一个PK。
使用Replace操作符
Measure-Command -Expression { 1..10000 | foreach { 'I love PowerShell' -replace 'Power','Powerfull '} }
使用Replace方法
Measure-Command -Expression { 1..10000 | foreach { 'I love PowerShell'.Replace('Power','Powerfull ') } }
前者花费时间为:0.402秒钟,后者花费时间为0.199秒钟。速度提升接近两倍。当我津津乐道准备以后只用第二种方法时,才回过神来,原来-replace操作符秉承了PowerShell的一贯的家风:大小写不敏感。同时-replace操作符,还支持对象替换,而Replace方法只停留在字符串层面上。二者压根就没有可比性。
不作死就不会死,自己给自己挖了个陷阱。
本文链接: https://www.pstips.net/the-pitfall-in-ps-perf-optimization.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
-creplace
是的,这个可以解决大小写敏感,但是不能解决对象替换。
平时还是应该方便快捷为主,只有在性能比较重要的地方才有必要进行优化,凡事不能矫枉过正啊
正是这个道理。
你好,我要用powershell 处理100m左右的txt,然后在输出到文件。
我是用 $B += $a+$newline, 这样效率很差,请问有什么方法可以优化这一步? 谢谢
这个只能用C#的流处理了。可以参考: 《PowerShell 分割和合并大文件》