我试图通过网络将一个大字符串转储到一个文本文件,但我每秒只能达到64kbit。 阅读一些关于编写文件的不同方法,并使用Streamwriter查看示例,但速度非常快,但这是写入本地文件。
遇到这个建议是增加缓冲区大小的线程。有谁知道如何在Powershell中做到这一点?
包括参考链接:
Writing to file using StreamWriter much slower than file copy over slow network
谢谢!
修改
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($PathToFile, $LargeTextMass, $Utf8NoBomEncoding, 0x10000)
Cannot find an overload for "WriteAllLines" and the argument count: "4".
编辑2:
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
$sw = new-object System.IO.StreamWriter "test2.txt", $false, $Utf8NoBomEncoding,0x10000
答案 0 :(得分:1)
StreamWriter的缓冲区在构造期间设置,因此您需要使用允许您在对象创建期间提供缓冲区大小的构造函数。 StreamWriter有两个构造函数,允许您设置缓冲区大小。
StreamWriter Constructor (Stream, Encoding, Int32)
StreamWriter Constructor (String, Boolean, Encoding, Int32)
要使用构造函数参数在Powershell中创建.Net对象,可以将new-object
cmdlet与多个参数一起使用:
[System.String] $fileName = 'C:\test\test.txt'
[System.Boolean] $append = $false
[System.Int32] $bufferSize = 10000
[System.Text.Encoding] $encoding = [System.Text.Encoding]::UTF8
$writer = new-object System.IO.StreamWriter -ArgumentList $fileName,$append,$encoding,$bufferSize
有时您可能会收到一条错误消息,指出powershell无法找到与您提供的参数匹配的构造函数。当没有自己明确定义参数类型时,Powershell有时会使用与.Net不同的数据类型。因此,使用构造函数所期望的类型显式声明所有参数是有意义的。