diff --git a/src/Autofac/Core/Resolving/ResolveOperationBase.cs b/src/Autofac/Core/Resolving/ResolveOperationBase.cs index 063ee97bd..f47927cc8 100644 --- a/src/Autofac/Core/Resolving/ResolveOperationBase.cs +++ b/src/Autofac/Core/Resolving/ResolveOperationBase.cs @@ -36,9 +36,12 @@ namespace Autofac.Core.Resolving /// public abstract class ResolveOperationBase : IResolveOperation, ITracingIdentifer { + private const int SuccessListInitialCapacity = 32; + private bool _ended; private IResolvePipelineTracer? _pipelineTracer; - private List _successfulRequests = new List(); + private List _successfulRequests = new List(SuccessListInitialCapacity); + private int _nextCompleteSuccessfulRequestStartPos = 0; /// /// Initializes a new instance of the class. @@ -241,9 +244,10 @@ private void CompleteRequests() { var completed = _successfulRequests; int count = completed.Count; + var startPosition = _nextCompleteSuccessfulRequestStartPos; ResetSuccessfulRequests(); - for (int i = 0; i < count; i++) + for (int i = startPosition; i < count; i++) { completed[i].Complete(); } @@ -251,7 +255,7 @@ private void CompleteRequests() private void ResetSuccessfulRequests() { - _successfulRequests = new List(); + _nextCompleteSuccessfulRequestStartPos = _successfulRequests.Count; } private void End(Exception? exception = null)