gpt4 book ai didi

c# - 当我显式关闭 Stream 时,关闭 StreamReader(或 StreamWriter)是否有好处?

转载 作者:行者123 更新时间:2023-11-30 20:17:42 32 4
gpt4 key购买 nike

我有以下代码。在这里,我将 StreamReader 构造函数与 leaveOpen: true 一起使用,为此我需要提供先前的参数 I manage to get their default values .这很麻烦。由于我将 streamusing 一起使用,我是否可以通过 using 使用 StreamReader 获得任何 yield ?如果它是 StreamWriter,答案会改变吗?

using (Strem stream = ...)
{
...
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8, true, 1024, true))
{
...
}
...
}

如果改用下面的代码,我会失去什么?

using (Strem stream = ...)
{
...
StreamReader sr = new StreamReader(stream);

...

...
}

最佳答案

您确实需要关闭 StreamWriter (通常通过 using block ),否则其缓冲区中的数据可能会丢失。

因为StreamReaderStreamWriter默认自动关闭流,如果你想消除一个 using阻止您的代码,它应该是 Stream您从 using 中删除的.

如果你做不到,例如你借了 Stream来自不希望您关闭它的其他地方,那么您必须使用 leaveOpen您已经知道的参数。您不能只省略 using 的原因StreamReader 的声明/StreamWriter为了让它保持打开状态,垃圾收集器仍然会触发一些清理(虽然不是那么多),因为对象无法访问......只是现在会在不相关的时间发生,产生一个很难发现的不可预测的错误.

不能指定leaveOpen确实很难看没有显式控制缓冲区大小等。我可以建议一个辅助方法吗 StreamReader CreateStreamReaderLeaveOpen(Stream)

关于c# - 当我显式关闭 Stream 时,关闭 StreamReader(或 StreamWriter)是否有好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43849639/

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