是有一个泄漏,这取决于你如何定义泄漏,多少后,你的意思是......
如果说泄漏是指“即使在使用完毕后,内存仍保持分配状态,无法使用”,而后者是指在调用dispose之后的任何时间,那么可能是有泄漏的,尽管它不是永久的(例如应用程序运行时的寿命)。
要释放MemoryStream所使用的托管内存,您需要通过取消对它的引用来取消对其的引用,以使其立即有资格进行垃圾回收。如果您这样做失败,那么从使用完毕开始,您将创建一个临时泄漏,直到您的引用超出范围为止,因为与此同时,该内存将无法分配。
using语句(而不是简单地调用dispose)的好处是,您可以在using语句中声明引用。using语句完成时,不仅会调用dispose,而且您的引用也会超出范围,从而有效地使引用无效,并使您的对象立即有资格进行垃圾回收,而无需您记住编写“ reference = null”代码。
虽然不能立即取消引用某些内容并不是经典的“永久”内存泄漏,但肯定具有相同的效果。例如,如果保留对MemoryStream的引用(即使在调用dispose之后),并且在方法中稍稍下移,则尝试分配更多的内存...仍被引用的内存流正在使用的内存将不可用直到您取消引用或引用超出范围为止,即使您调用了dispose并且已完成使用它。