Skip to content

Commit b22512d

Browse files
Right-size Lists when created (#23714)
Create new instances of List<T> with an appropriate capacity for the items that will be added. Use Array.Empty<T>() where appropriate, rather than create an empty list and then return it.
1 parent d2f34d6 commit b22512d

File tree

36 files changed

+71
-66
lines changed

36 files changed

+71
-66
lines changed

src/FileProviders/Embedded/src/Manifest/ManifestDirectory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ internal static void ValidateChildrenAndSetParent(ManifestEntry[] children, Mani
9898

9999
private ManifestEntry[] CopyChildren()
100100
{
101-
var list = new List<ManifestEntry>();
101+
var list = new List<ManifestEntry>(Children.Count);
102102
for (int i = 0; i < Children.Count; i++)
103103
{
104104
var child = Children[i];

src/Http/Http/src/Features/RequestCookiesFeature.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public IRequestCookieCollection Cookies
8080
}
8181
else
8282
{
83-
var headers = new List<string>();
83+
var headers = new List<string>(_parsedValues.Count);
8484
foreach (var pair in _parsedValues)
8585
{
8686
headers.Add(new CookieHeaderValue(pair.Key, pair.Value).ToString());

src/Http/Routing/src/Patterns/RoutePatternFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ RoutePatternPart VisitPart(RoutePatternPart part)
497497
updatedParameterPolicies = new Dictionary<string, List<RoutePatternParameterPolicyReference>>(StringComparer.OrdinalIgnoreCase);
498498
}
499499

500-
parameterConstraints = new List<RoutePatternParameterPolicyReference>();
500+
parameterConstraints = new List<RoutePatternParameterPolicyReference>(parameter.ParameterPolicies.Count);
501501
updatedParameterPolicies.Add(parameter.Name, parameterConstraints);
502502
}
503503

src/Identity/Core/src/SignInManager.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,16 +169,22 @@ public virtual async Task<bool> CanSignInAsync(TUser user)
169169
public virtual async Task RefreshSignInAsync(TUser user)
170170
{
171171
var auth = await Context.AuthenticateAsync(IdentityConstants.ApplicationScheme);
172-
var claims = new List<Claim>();
172+
IList<Claim> claims = Array.Empty<Claim>();
173+
173174
var authenticationMethod = auth?.Principal?.FindFirst(ClaimTypes.AuthenticationMethod);
174-
if (authenticationMethod != null)
175-
{
176-
claims.Add(authenticationMethod);
177-
}
178175
var amr = auth?.Principal?.FindFirst("amr");
179-
if (amr != null)
176+
177+
if (authenticationMethod != null || amr != null)
180178
{
181-
claims.Add(amr);
179+
claims = new List<Claim>();
180+
if (authenticationMethod != null)
181+
{
182+
claims.Add(authenticationMethod);
183+
}
184+
if (amr != null)
185+
{
186+
claims.Add(amr);
187+
}
182188
}
183189

184190
await SignInWithClaimsAsync(user, auth?.Properties, claims);
@@ -203,9 +209,10 @@ public virtual Task SignInAsync(TUser user, bool isPersistent, string authentica
203209
/// <returns>The task object representing the asynchronous operation.</returns>
204210
public virtual Task SignInAsync(TUser user, AuthenticationProperties authenticationProperties, string authenticationMethod = null)
205211
{
206-
var additionalClaims = new List<Claim>();
212+
IList<Claim> additionalClaims = Array.Empty<Claim>();
207213
if (authenticationMethod != null)
208214
{
215+
additionalClaims = new List<Claim>();
209216
additionalClaims.Add(new Claim(ClaimTypes.AuthenticationMethod, authenticationMethod));
210217
}
211218
return SignInWithClaimsAsync(user, authenticationProperties, additionalClaims);

src/Middleware/Localization/src/RequestLocalizationOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public RequestCulture DefaultRequestCulture
122122
/// <returns>The <see cref="RequestLocalizationOptions"/>.</returns>
123123
public RequestLocalizationOptions AddSupportedCultures(params string[] cultures)
124124
{
125-
var supportedCultures = new List<CultureInfo>();
125+
var supportedCultures = new List<CultureInfo>(cultures.Length);
126126

127127
foreach (var culture in cultures)
128128
{
@@ -140,7 +140,7 @@ public RequestLocalizationOptions AddSupportedCultures(params string[] cultures)
140140
/// <returns>The <see cref="RequestLocalizationOptions"/>.</returns>
141141
public RequestLocalizationOptions AddSupportedUICultures(params string[] uiCultures)
142142
{
143-
var supportedUICultures = new List<CultureInfo>();
143+
var supportedUICultures = new List<CultureInfo>(uiCultures.Length);
144144
foreach (var culture in uiCultures)
145145
{
146146
supportedUICultures.Add(new CultureInfo(culture));

src/Mvc/Mvc.Core/src/ApplicationModels/ApplicationModelFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ private static string CreateMixedRoutedActionDescriptorsErrorMessage(
309309
// Text to show as the attribute route template for conventionally routed actions.
310310
var nullTemplate = Resources.AttributeRoute_NullTemplateRepresentation;
311311

312-
var actionDescriptions = new List<string>();
312+
var actionDescriptions = new List<string>(actions.Count);
313313
for (var i = 0; i < actions.Count; i++)
314314
{
315315
var (action, selector) = actions[i];

src/Mvc/Mvc.Core/src/ApplicationModels/ControllerActionDescriptorBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private static void AddControllerPropertyDescriptors(ActionDescriptor actionDesc
6363

6464
private static void AddParameterDescriptors(ActionDescriptor actionDescriptor, ActionModel action)
6565
{
66-
var parameterDescriptors = new List<ParameterDescriptor>();
66+
var parameterDescriptors = new List<ParameterDescriptor>(action.Parameters.Count);
6767
foreach (var parameter in action.Parameters)
6868
{
6969
var parameterDescriptor = CreateParameterDescriptor(parameter);

src/Mvc/Mvc.Core/src/ApplicationModels/DefaultApplicationModelProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ internal ActionModel CreateActionModel(
352352

353353
// This is fairly complicated so that we maintain referential equality between items in
354354
// ActionModel.Attributes and ActionModel.Attributes[*].Attribute.
355-
var applicableAttributes = new List<object>();
355+
var applicableAttributes = new List<object>(routeAttributes.Length);
356356
foreach (var attribute in attributes)
357357
{
358358
if (attribute is IRouteTemplateProvider)

src/Mvc/Mvc.Core/src/BindAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class BindAttribute : Attribute, IModelNameProvider, IPropertyFilterProvi
2525
/// <param name="include">Names of parameters to include in binding.</param>
2626
public BindAttribute(params string[] include)
2727
{
28-
var items = new List<string>();
28+
var items = new List<string>(include.Length);
2929
foreach (var item in include)
3030
{
3131
items.AddRange(SplitString(item));

src/Mvc/Mvc.Core/src/ConsumesAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ private bool IsApplicable(ActionDescriptor actionDescriptor)
199199

200200
private MediaTypeCollection GetContentTypes(string firstArg, string[] args)
201201
{
202-
var completeArgs = new List<string>();
202+
var completeArgs = new List<string>(args.Length + 1);
203203
completeArgs.Add(firstArg);
204204
completeArgs.AddRange(args);
205205
var contentTypes = new MediaTypeCollection();

0 commit comments

Comments
 (0)