|
|
1
2
更糟的是,它具有破坏性。你基本上是在添加内存流之前关闭它。有关详细信息,请参阅其他答案,但基本上是在最后处理,而不是在任何其他时间。每次对对象使用都会导致在块的末尾发生释放,即使对象通过方法“传递”给其他对象。
是的,但你让生活变得比需要的更困难。试试这个:
这同样有效,而且更简单。处置一个对象不会删除它-它只是告诉它释放它的内部非托管资源。以这种方式对对象调用Dispose是可以的-对象在集合中保持未收集状态。您可以这样做,然后一次清除列表。
这取决于你的情况。只有您可以确定将这些文件保存在内存中的开销是否会导致您的问题。不过,这将是一个相当重的物体,所以我会小心使用。
实现终结器。无论何时实现IDisposable,这都是一个好主意。另外,您应该将Dispose实现返工为标准的实现,或者将类标记为Sealed。有关如何执行此操作的详细信息,
see this article.
尤其是,您应该有一个方法声明为
|
|
|
2
4
加上文件来消除恐惧。
此代码正在将已释放的流添加到pdfdocumentstream列表中。相反,您应该使用以下方法简单地添加流:
并按处置方法处置。 另外,您还应该考虑实现一个终结器,以确保在有人忘记释放顶级对象的情况下,可以释放一些东西。 |
|
|
3
2
在我看来你误解了使用的作用。 只是语法上的糖分
您在addfiletomanipulate中的使用是多余的。我已经在pdfdocumentManipulator的构造函数中设置了memoryStream的列表,然后对所有memoryStream进行pdfdocumentManipulator的Dispose方法调用Dispose。 |
|
|
4
2
边注。这似乎真的需要一个扩展方法。
现在您的Dispose方法变为
编辑 您不需要3.5框架来拥有扩展方法。他们将很乐意使用3.0编译器,目标是2.0 http://blogs.msdn.com/jaredpar/archive/2007/11/16/extension-methods-without-3-5-framework.aspx |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |