gpt4 book ai didi

file - 提高Powershell性能以生成随机文件

转载 作者:行者123 更新时间:2023-12-03 00:23:29 27 4
gpt4 key购买 nike

我想让Powershell用户创建一个随机文本文件以用于基本系统测试(上传,下载,校验和等)。 我使用了以下文章,并提供了自己的代码段来创建随机文本文件,但是性能很差。

  • Generating Random Files in Windows(stackoverflow.com)
  • PowerShell – Creating Dummy files(verboon.info)
  • Create large files with Powershell(基于上面的动词代码的chris-nullpayload.rhcloud.com)

  • 这是我的代码示例 ,它需要大约227秒才能在现代Windows 7 Dell笔记本电脑上生成1MB的随机文本文件。运行时间是使用Measure-Command cmdlet确定的。我在不同的系统负载下重复了几次测试,并获得了相似的长时间运行结果。
    # select characters from 0-9, A-Z, and a-z
    $chars = [char[]] ([char]'0'..[char]'9' + [char]'A'..[char]'Z' + [char]'a'..[char]'z')
    # write file using 128 byte lines each with 126 random characters
    1..(1mb/128) | %{-join (1..126 | %{get-random -InputObject $chars }) } `
    | out-file test.txt -Encoding ASCII

    我正在寻找讨论 的问题的答案,为什么此代码的性能会降低,并提出关于 的简单更改的建议,我可以进行改进以改进运行时,以生成类似的随机文本文件(ASCII文本行,包含126个随机字母数字字符-128字节,带有“\ r \ n“EOL,输出文件为偶数兆字节,例如上面的1MB示例)。我希望将文件输出分段(每次一行或多行),这样我们就永远不需要一个存储在内存中的输出文件大小的字符串。

    最佳答案

    与@dugas达成共识,瓶颈是为每个字符调用Get-Random

    如果增加字符数组集并使用Get-Random的-count属性,则应该能够实现几乎相同的随机性。

    如果您使用的是V4,则.foreach方法比foreach-object快得多。

    还可以将Out-File换成Add-Content,这也应该有所帮助。

    # select characters from 0-9, A-Z, and a-z
    $chars = [char[]] ([char]'0'..[char]'9' + [char]'A'..[char]'Z' + [char]'a'..[char]'z')
    $chars = $chars * 126
    # write file using 128 byte lines each with 126 random characters
    (1..(1mb/128)).foreach({-join (Get-Random $chars -Count 126) | add-content testfile.txt })

    在我的系统上,这大约需要32秒。

    编辑:设置内容与输出文件,使用生成的测试文件:
    $x = Get-Content testfile.txt

    (Measure-Command {$x | out-file testfile1.txt}).totalmilliseconds
    (Measure-Command {$x | Set-Content testfile1.txt}).totalmilliseconds

    504.0069
    159.0842

    关于file - 提高Powershell性能以生成随机文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181000/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com