Skip to content

Commit a62e27e

Browse files
authored
Avoid allocations from LINQ.Reverse() (#28387)
1 parent cb37068 commit a62e27e

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/Hosting/Hosting/src/Internal/StartupLoader.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,9 @@ IServiceProvider ConfigureServicesWithContainerConfiguration(IServiceCollection
159159
IServiceProvider? RunPipeline(IServiceCollection services)
160160
{
161161
#pragma warning disable CS0612 // Type or member is obsolete
162-
var filters = HostingServiceProvider.GetRequiredService<IEnumerable<IStartupConfigureServicesFilter>>().Reverse().ToArray();
162+
var filters = HostingServiceProvider.GetRequiredService<IEnumerable<IStartupConfigureServicesFilter>>()
163163
#pragma warning restore CS0612 // Type or member is obsolete
164+
.ToArray();
164165

165166
// If there are no filters just run startup (makes IServiceProvider ConfigureServices(IServiceCollection services) work.
166167
if (filters.Length == 0)
@@ -169,7 +170,7 @@ IServiceProvider ConfigureServicesWithContainerConfiguration(IServiceCollection
169170
}
170171

171172
Action<IServiceCollection> pipeline = InvokeStartup;
172-
for (int i = 0; i < filters.Length; i++)
173+
for (int i = filters.Length - 1; i >= 0; i--)
173174
{
174175
pipeline = filters[i].ConfigureServices(pipeline);
175176
}
@@ -204,15 +205,13 @@ void RunPipeline(TContainerBuilder containerBuilder)
204205
{
205206
var filters = HostingServiceProvider
206207
#pragma warning disable CS0612 // Type or member is obsolete
207-
.GetRequiredService<IEnumerable<IStartupConfigureContainerFilter<TContainerBuilder>>>()
208+
.GetRequiredService<IEnumerable<IStartupConfigureContainerFilter<TContainerBuilder>>>();
208209
#pragma warning restore CS0612 // Type or member is obsolete
209-
.Reverse()
210-
.ToArray();
211210

212211
Action<TContainerBuilder> pipeline = InvokeConfigureContainer;
213-
for (int i = 0; i < filters.Length; i++)
212+
foreach (var filter in filters.Reverse())
214213
{
215-
pipeline = filters[i].ConfigureContainer(pipeline);
214+
pipeline = filter.ConfigureContainer(pipeline);
216215
}
217216

218217
pipeline(containerBuilder);

0 commit comments

Comments
 (0)