【问题标题】:Powershell changing .net streamwriter buffer sizePowershell 更改.net streamwriter 缓冲区大小
【发布时间】:2017-08-16 05:50:02
【问题描述】:

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

【问题讨论】:

  • 与您链接的示例中的解释方式非常相似。您正在使用必要的构造函数参数创建流写入器,在本例中为流、编码和缓冲区大小:msdn.microsoft.com/en-US/library/72d9f8d5(v=vs.110).aspx。或字符串、布尔值、编码和缓冲区大小:msdn.microsoft.com/en-us/library/0wf7ab94(v=vs.110).aspx
  • 第一次尝试效果不佳。也许我需要先创建它。
  • 是的,您需要先创建带有参数的对象,例如:$sw = new-object System.IO.StreamWriter $path System.Text.Encoding.UTF8 $false 10000。您可以使用 new-object 创建带有构造函数参数的 .Net 对象。
  • 好一个。请添加作为示例(但更改参数的顺序,因为顺序有点混乱),我会将其标记为正确答案。

标签: .net powershell streamwriter


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多