Сохраняют ли открытые свойства объекта ссылку на объект? - PullRequest
1 голос
/ 20 декабря 2011

У меня есть объект,

 public class ExpensiveObject(HttpContext context, ....)
 {
     public Stream OnlyCareAboutThisStream { get; private set; }
 }

Я хочу сохранить ссылку на OnlyCareAboutThisStream, но мне все равно, какой дорогой Ex ExobObject.

Какие варианты я могу сделатьиметь?Нужно ли копировать поток?Чтобы уточнить, я собираюсь поставить этот объект в очередь (OnlyCareAboutThisStream) в очередь, которая будет медленно записываться на диск в фоновом потоке.

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Не совсем понятно, о чем вы спрашиваете, но если вы рассматриваете такой код:

ExpensiveObject expensive = new ExpensiveObject(context);
Stream stream = expensive.OnlyCareAboutThisStream;

тогда дорогой объект будет иметь право на сборку мусора после второй строки, при условии, что он не использует какой-то пользовательский поток, который имеет ссылку на свой «родительский» дорогой объект.

0 голосов
/ 20 декабря 2011

Нет, вам не нужно копировать поток.Просто держите ссылку на Поток откуда-то еще и позвольте ExblyObject выйти из области видимости.

Возможно, вы захотите внедрить IDisposable на свой ExblyObject и явным образом избавиться от него (хотя это взаимоисключающий WRT, который выходит из области видимости ExbodyObject):

public class ExpensiveObject(HttpContext context, ....) : IDisposable
{
    public Stream OnlyCareAboutThisStream { get; private set; }
}

...

Stream myStream = null;
using (var exObj = new ExpensiveObject(context))
{
    myStream = exObj.OnlyCareAboutThisStream;
}
...