memory - Powershell 内存使用情况

标签 memory powershell

我对 Powershell 有点菜鸟,所以请不要责骂我:-) 因此,我需要处理一些相当大的日志文件(600mb),我的脚本本质上是删除那些包含“Message Received”的行,然后标记这些行并将一些标记输出到输出文件。 p>

脚本的逻辑很好(虽然我确信它可以更有效),但问题是,当我向输出文件写入行并且文件随后变大时,powershell 使用的内存量也会增加到内存耗尽点。

谁能建议我如何阻止这种情况发生?我考虑过将日志分解成一个仅 10mb 的临时文件,然后在临时文件上进行处理?

这是我的代码,你们能提供的任何帮助都会很棒:-)

Get-Date | Add-Content -Path d:\scripting\logparser\testoutput.txt


$a = Get-Content D:\scripting\logparser\importsample.txt 


foreach($l in $a){
#$l | Select-String -Pattern "Message Received." | Add-Content -Path d:\scripting\logparser\testoutput.txt
if
    (($l | Select-String -Pattern "Message Received." -Quiet) -eq "True")

    {
    #Add-Content -Path d:\scripting\logparser\testoutput.txt -value $l
    $var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10,$var11,$var12,$var13,$var14,$var15,$var16,$var17,$var18,$var19,$var20 = [regex]::split($l,'\s+')
    Add-Content -Path d:\scripting\logparser\testoutput.txt -value $var1" "$var2" "$var3" "$var4" "$var16" "$var18

    }
else
    {}
}   
Get-Date | Add-Content -Path d:\scripting\logparser\testoutput.txt

最佳答案

如果您在管道中执行所有操作,则一次仅需要一个对象(在您的情况下文件中的一行)需要存储在内存中。

Get-Content $inputFile | Where-Object { $_ -match "Message Received" } |
  foreach-object -process {
  $fields = [regex]::split($_,'\s+') # An array is created
  Add-Content -path $outputFile -value [String]::Join(" ", $fields[0,1,2,3,15,17])
}

$fields[0,1,2,3,15,17] 创建 $fields 给定索引的数组。

这也可以在单个管道中使用表达式而不是传递给 Select-Object 的属性名称来完成,但不太清楚。

关于memory - Powershell 内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614317/

相关文章:

json - 使用powershell为json添加新的键值对

通过 Powershell 的 Azure 克隆应用程序 - InternalServerError

java - Parent 变量如何存储大于 Parent 的 Child?

Java VM 内存性能 - 数组写入比数组读取快吗?

php - 服务器PHP内存限制是否适用于SQLite访问

c++ - 在 CUDA 6 中结合纹理内存 Unified Memory

powershell - AzureAD PowerShell New-AzureRmRoleAssignment 不断失败

memory - 限制 ImageMagick 内存使用

html - 无法在 PowerShell 中触发单击事件

powershell - 在Windows窗体上添加文档链接