Комментарии 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 не будет использован (не будет внедрен где-то), то и накапливать он ничего не будет и даже не будет создан. А будет работать только ваш.
Новое в Pure.DI