Powershell改变.net流写器缓冲区大小

时间:2017-03-23 15:12:23

标签: .net powershell streamwriter

我试图通过网络将一个大字符串转储到一个文本文件,但我每秒只能达到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

1 个答案:

答案 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不同的数据类型。因此,使用构造函数所期望的类型显式声明所有参数是有意义的。