Browse Source

PoC of Closure Allocation remove

pull/14453/head
Jakub Baranowski 3 years ago
parent
commit
5433fe6dbc
  1. 18
      framework/src/Volo.Abp.Core/Volo/Abp/DisposeAction.cs
  2. 7
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs

18
framework/src/Volo.Abp.Core/Volo/Abp/DisposeAction.cs

@ -27,3 +27,21 @@ public class DisposeAction : IDisposable
_action();
}
}
public class DisposeActionWithoutClosureAlloc<T> : IDisposable
{
private readonly Action<T> _action;
[CanBeNull] private readonly T _parameter;
public DisposeActionWithoutClosureAlloc(Action<T> action, T parameter)
{
Check.NotNull(action, nameof(action));
_action = action;
_parameter = parameter;
}
public void Dispose()
{
_action(_parameter);
}
}

7
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs

@ -27,9 +27,10 @@ public class CurrentTenant : ICurrentTenant, ITransientDependency
{
var parentScope = _currentTenantAccessor.Current;
_currentTenantAccessor.Current = new BasicTenantInfo(tenantId, name);
return new DisposeAction(() =>
return new DisposeActionWithoutClosureAlloc<ValueTuple<ICurrentTenantAccessor, BasicTenantInfo>>(static (state) =>
{
_currentTenantAccessor.Current = parentScope;
});
var (currentTenantAccessor, parentScope) = state;
currentTenantAccessor.Current = parentScope;
}, (_currentTenantAccessor, parentScope));
}
}

Loading…
Cancel
Save