1
179
至少在当前的实现中,您不会泄漏任何信息。 调用Dispose不会更快地清理MemoryStream使用的内存。信息技术 将 停止流在调用后执行读/写调用,这可能对您有用,也可能对您不有用。 从不 如果您想从MemoryStream移动到另一种流,不调用Dispose不会对您造成任何伤害。然而,这通常是一种好的做法,部分原因是如果你 更改为使用不同的流,您不想被难以找到的bug咬到,因为您在早期选择了简单的方法。(另一方面,有雅格尼论点…) 也许 |
2
64
|
3
29
有 漏 ,这取决于您如何定义泄漏,以及您所指的延迟时间。。。 如果泄漏的意思是“内存仍然被分配,不可使用,即使您已经使用完毕”,而后者的意思是在调用dispose之后的任何时间,那么可能存在泄漏,尽管它不是永久性的(即在应用程序运行时的生命周期内)。 你需要取消引用它 ,使您对它的引用无效,这样它就可以立即进行垃圾收集。如果您没有做到这一点,那么您将创建一个临时泄漏,从您使用它的时候开始,直到您的引用超出范围,因为在此期间内存将无法分配。
虽然无法立即取消引用某些内容并不是经典的“永久性”内存泄漏,但它肯定具有相同的效果。例如,如果您保留对MemoryStream的引用(即使在调用dispose之后),并且在方法中再往下一点,您将尝试分配更多内存。。。即使调用了dispose并使用完毕,但在取消引用或引用超出范围之前,仍被引用的内存流所使用的内存将不可用。 |
4
9
这已经得到了回答,但我只想补充一点,信息隐藏的传统原则意味着您可能在将来某个时候想要重构:
致:
如果您没有在bar实现中使用Dispose,那么您将需要遇到麻烦:
|
5
8
使命感
你打电话的原因是什么
以堆栈溢出服务器(Stack Overflow server)为例,在该服务器中,我们有一组有限的内存和数千个请求。我们不希望等待计划的垃圾收集,我们希望尽快释放内存,以便新的传入请求可以使用它。 |
6
5
无论您在哪里调用Foo,都可以使用(MemoryStream ms=Foo())进行操作,我认为您应该仍然可以。 |
7
3
我建议将MemoryStream包装成
|
8
2
您不会泄漏内存,但您的代码审阅者指示您应该关闭流是正确的。这样做是有礼貌的。 唯一可能泄漏内存的情况是,您意外地留下了对流的引用,并且从未关闭它。您仍然没有真正泄漏内存,但是 是 |
9
1
如果对象实现了IDisposable,则必须在完成后调用.Dispose方法。 在某些对象中,Dispose与Close的含义相同,反之亦然,在这种情况下,两者都是好的。
|
10
-1
|
11
-2
|
12
-3
MemorySteram只是字节数组,它是托管对象。
忘记处理或关闭,这并没有任何副作用,除了在头上完成。
|
Sophart · 如何解决GDI+中发生的一般错误。在VB中。网 6 年前 |
tmighty · 保持MemoryStream打开或克隆映像 7 年前 |
ScarletMerlin · MVC在上传前转换图像 9 年前 |
NoWar · 从MemoryStream反序列化问题 11 年前 |