gpt4 book ai didi

powershell - 在 Powershell 中,处理超过 1GB 的文件时收到 "OutOfMemoryException"

转载 作者:行者123 更新时间:2023-12-03 23:02:10 60 4
gpt4 key购买 nike

在加载到我的数据仓库之前,我正在做一些文件清理工作,但遇到了文件大小问题:

(Get-Content -path C:\Workspace\workfile\myfile.txt -Raw) -replace '\\"', '"' | Set-Content C:\Workspace\workfile\myfileCLEAN.txt
我的文件大约是 2GB。我收到以下错误,不知道如何更正。

Get-Content : Exception of type 'System.OutOfMemoryException' wasthrown, ........


我不是编码员,但我喜欢学习,因此正在构建自己的数据仓库。因此,如果您做出回应,请记住我的经验水平:)

最佳答案

Get-Content -Raw使 PowerShell 将整个文件读入单个字符串。
.NET 无法在内存中存储大小超过 2GB 的单个对象,并且字符串中的每个字符占用 2 个字节,因此在读取前约 10 亿个字符(大致相当于 1GB ASCII 编码文本文件)后,它达到内存限制。
删除 -Raw开关,-replace完全能够同时操作多个输入字符串:

(Get-Content -path C:\Workspace\workfile\myfile.txt) -replace '\"', '"' | Set-Content C:\Workspace\workfile\myfileCLEAN.txt
当心 -replace是正则表达式运算符,如果要删除 \从字符串中,您需要对其进行转义:
(Get-Content -path C:\Workspace\workfile\myfile.txt) -replace '\\"', '"' | Set-Content C:\Workspace\workfile\myfileCLEAN.txt
虽然这会起作用,但它仍然会很慢,因为在应用 -replace 之前,我们仍在将 >2GB 的数据加载到内存中。并写入输出文件。
相反,您可能希望通过管道传输来自 Get-Content 的输出。到 ForEach-Object小命令:
Get-Content -path C:\Workspace\workfile\myfile.txt |ForEach-Object {
$_ -replace '\\"','"'
} |Set-Content C:\Workspace\workfile\myfileCLEAN.txt
这允许 Get-Content在完成读取文件之前开始推送输出,因此 PowerShell 不再需要分配与以前一样多的内存,从而加快执行速度。

关于powershell - 在 Powershell 中,处理超过 1GB 的文件时收到 "OutOfMemoryException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64936903/

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