我想创建一个返回XmlReader的方法.根据具体情况,可以向XmlReader提供不同类型的流,StringReader或MemoryStream.
通常我使用一个使用块来处理StringReader或MemoryStream,但是因为我想要返回一个XmlReader,如果我想要使用这个设计,我不能这样做.我不希望MemoryStream分配大量的内存,所以我可以忍受资源释放的轻微延迟.
在这种情况下让GC处理StringReader和MemoryStream的后果是否可以接受?
我应该澄清,这是一个实际问题,而不是最佳实践问题.显然,这个理论要求我应该清理自己的资源分配,但理论上也说我应该选择最简单的设计来实现最大的可维护性.在某些情况下,打破最佳实践可以恕我直言,我的问题是这个具体案例是否有理由打破最佳实践.
这也只是关于StringReader和MemoryStream,而不是一般的流或读者.我在这种情况下证明它的理由是,StringReader/MemoryStream的实际创建被很好地封装在返回XmlReader的方法中,因此可以控制XmlReader不会被提供有限资源的流.
在这种情况下,没有什么会受到影响,但IMO仍然是非常糟糕的做法.你拥有它们 - 为什么不正确呢?事实上,配置一个MemoryStream仍然不能解除分配等-它仍然由GC约束.但是这里有一个明显的代码味道.如果有任何变化,这可能成为真正的问题,突然间它不是一个,MemoryStream而是其他东西,等等.
我们不能让你处理它,但个人:我对我using的态度很挑剔