Col*_*lin 11 c# dispose idisposable
我是否必须这样做以确保正确处理MemoryStream?
using (MemoryStream stream = new MemoryStream(bytes))
using (XmlReader reader = XmlReader.Create(stream))
{
return new XmlDocument().Load(reader);
}
Run Code Online (Sandbox Code Playgroud)
或者可以内联MemoryStream以使其超出范围?像这样?
using (XmlReader reader = XmlReader.Create(new MemoryStream(bytes)))
{
return new XmlDocument().Load(reader);
}
Run Code Online (Sandbox Code Playgroud)
ang*_*son 11
作为一般规则,是的,您应该像第一个示例中那样编写代码.
有些类接受传递给它的对象的所有权,因此当你处理外部对象时,它会自动为你处理内部对象,但这是规则的例外.
无论如何,Dispose不止一次打电话应该是安全的.也就是说,对象应该实现它,以便它是安全的,只在第一次完成工作.
因此,作为一般规则,请使用第一种语法.
现在,对于指定的示例,它应该不重要,因为MemoryStream它并不真正保留需要处理的任何资源,但是也存在该期望的问题.如果您知道对象的给定版本不使用资源,那么忽略它是安全的Dispose,那么如果将来获得这样的资源,您会突然获得泄漏.
除非你看到给定代码带来一些负面影响,比如增加太多开销,否则我根本就不用担心.