Как стать автором
Обновить

Комментарии 2

Измеряли ли вы как быстро работает накопитель Owned, подойдет ли он для очень большого количества "утилизируемых" объектов?

Реализация Owned выглядит примерно так:

class Owned : IOwned
{
    private List<IDisposable> _disposables = List<IDisposable>();
    
    public void Add(IDisposable disposable)
    {
        if (!(disposable is Pure.DI.IOwned))
        {
            _disposables.Add(disposable);
        }
    }
}

Его производительность почти полностью зависит от производительности List<T>. Я замерял, но под рукой цифр нет - довольно быстрый))

Предполагается, что утилизируемых объектов не будет слишком много:

  • так как дорогих ресурсов не должно быть много

  • если накапливать много, то могу быть проблемы с памятью

Вы всегда можете заменить его на свой. Для этого зарегистрируйте свою реализацию накопителя, например MyOwned:

Accumulate<IDisposable, MyOwned>(
  Lifetime.Transient,
  Lifetime.PerResolve,
  Lifetime.PerBlock)

И используйте его. При этом если Owned из API Pure.DI не будет использован (не будет внедрен где-то), то и накапливать он ничего не будет и даже не будет создан. А будет работать только ваш.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории