【发布时间】:2018-01-06 04:34:06
【问题描述】:
我有一个 CryptoStream 和一个基础 Stream。我不能使用using 块来处理CryptoStream,因为这也会处理我需要保持打开状态的底层Stream。解决方案似乎只是忽略CryptoStream 并在需要时处理Stream。但也许保留对CryptoStream 的引用并处理它以防止某些资源泄漏很重要?
此外,即使我不处置CryptoStream,如果它超出范围,GC 也会处置它,然后还处置底层的Stream,(这还为时过早,因为我仍然需要@ 987654331@)?
【问题讨论】:
-
您确定需要基本流保持打开状态吗?因为它被设计成这样是有原因的。
-
最安全的方法是加密到内存流并在处理完加密流后使用其缓冲区。推荐用于小数据。
-
@HenkHolterman 是的。我需要对一些流进行哈希处理,并在没有哈希 CryptoStream 的情况下继续处理其余部分。
-
否则,请确保调用 FlushFinalBuffer 和 Flush 并保留对 CryptoStgream 的引用,直到完成。
-
@HenkHolterman 我确实刷新了 CryptoStream。
标签: c# .net encryption stream garbage-collection