这个陈述有什么问题?
return Encoding.ASCII.GetString(memoryStream.GetBuffer(), 0, memoryStream.Length)
Run Code Online (Sandbox Code Playgroud)
我知道Dispose模式,检查了底层的memoryStream,发现在dispose中没有发生任何事情.那么为什么我不允许我的一个开发人员这样做呢.
返回后,memoryStream超出范围.
目的是使代码简洁而不创建不需要的引用,希望尽快让垃圾收集器启动.
它只是让我感到唠叨,我觉得memoryStream让派对失败了,与其他流做的相比,以及为什么他们实现了IDispose.
有人可以给我一个很好的理由不允许上面的代码.我对代码不正确但需要一些备份感到胆怯.:)
****WeNeedAnswers****:编辑请注意由于Jon Skeets输入代码已经改变,但这个问题主要核心仍然相关.
我的原始和容易出错的代码是:
return new ASCIIEncoding().GetString(memoryStream.ToArray());
Run Code Online (Sandbox Code Playgroud)
就个人而言我会用:
string text;
memoryStream.Position = 0;
using (TextReader reader = new StreamReader(memoryStream, Encoding.ASCII))
{
text = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
作为一种更通用的方式 - 但你的代码至少应该起作用.如果您的目标是不创建超出需要的对象,则应使用Encoding.ASCII而不是创建新实例.如果你对复制真的很偏执,你可以使用:
string text = Encoding.ASCII.GetString(memoryStream.GetBuffer(),
0, memoryStream.Length);
Run Code Online (Sandbox Code Playgroud)
这样可以避免创建数据副本.
你似乎关心内存使用 - 你有什么理由吗?您是否进行过分析并发现垃圾收集是一个瓶颈?如果没有,不用担心它,直到你不觉得这是一个问题.通常不是.
| 归档时间: |
|
| 查看次数: |
6529 次 |
| 最近记录: |