我有一个对象,
public class ExpensiveObject(HttpContext context, ....)
{
public Stream OnlyCareAboutThisStream { get; private set; }
}
我想持有对OnlyCareAboutThisStream的引用,但不关心ExpensiveObject,它真的很贵。
我有哪些选择?我需要复制流吗?详细说明,我将把这个对象(OnlyCareAboutThisStream)排队到一个将在后台线程中慢慢写入磁盘的队列中。
答案 0 :(得分:3)
你要问的是什么并不完全清楚,但如果你正在考虑这样的代码:
ExpensiveObject expensive = new ExpensiveObject(context);
Stream stream = expensive.OnlyCareAboutThisStream;
那么昂贵的对象将有资格在第二行之后进行垃圾收集,假设它没有使用一些自定义流,它引用了它的“父”昂贵的对象。
答案 1 :(得分:0)
不,您不需要复制流。只需从其他地方保持对Stream的引用,并允许ExpensiveObject超出范围。
您可能希望在ExpensiveObject上实现IDisposable并明确处理它(尽管这是与ExpensiveObject超出范围的互斥WRT):
public class ExpensiveObject(HttpContext context, ....) : IDisposable
{
public Stream OnlyCareAboutThisStream { get; private set; }
}
...
Stream myStream = null;
using (var exObj = new ExpensiveObject(context))
{
myStream = exObj.OnlyCareAboutThisStream;
}