配置类资源

时间:2013-03-23 13:49:02

标签: c#

我有以下课程:

public class MailData : IDisposable
{
  public IDictionary<String, Tuple<Byte[], String>> Attachments { get; set; }
  public String From { get; set; }
  public IList<String> To { get; set; }   
  public MailType Type { get; set; }
} // MailData

处理课程的正确方法是什么?

我的意思是,我想我应该从Byte[] ...

中删除所有Dictionary

其他属性怎么样?

4 个答案:

答案 0 :(得分:4)

.NET是一个托管环境,你必须允许垃圾收集器完成它的工作,没有理由你处理简单的引用类,byte[]仍然是一个引用。

通常使用Dispose模式释放有价值的资源,例如文件I / O,各种Streams,数据库连接......等等。

但是,在您的情况下,您无需自己做任何事情。

欢迎来到C#的托管世界。

答案 1 :(得分:1)

你不需要做任何事情,除非你的MailType类也是一次性的,在这种情况下你会想要处理它。您不需要清除任何集合,因为它们将在它们超出范围后的某个时间与它们的内容一起被垃圾收集。

答案 2 :(得分:1)

除非MailType有一些非托管资源,否则你不应该做任何事情。在这种情况下,您应该重写此类的Dispose并调用MailType对象的Dispose。

此外,如果字典中的字节数很大,则应将实例包装在using语句中。

using(var m = new MailData())
{
   // use the object here

} // the m.Dispose() gets called here

答案 3 :(得分:0)

首先,您应该考虑需要实施哪些方法。 你可以找到一篇有趣的文章here 总结:你应该只在你真正需要时实现dispose / finalize,否则它只会降低GC的速度。在这些方法中,您只需要释放非托管资源。要了解有关非托管资源的更多信息,请查看this。 还要问问自己:我是通过调用dispose明确释放非托管资源还是让我通过隐式调用Finalize来让GC完成它。

希望有所帮助, Xaser