Checked LINQ queries and collections for inefficiencies.
- Made Array.IndexOf available via extension method. - Made ToHashSet extension method. - Change collections queried often via Contains into sets. - Avoid Count() extension if Count or Length property exist. - Made Count() > 0 checks and variations calls to Any() instead. - Don't call ToList/ToArray if there is no benefit to materializing the sequence. - If the sequence does benefit from materialization, follow this general pattern: - Collection queried often via Contains use ToHashSet to speed up lookups. - Short lived variables use ToList. This is because ToArray requires an extra copy to output the final size. - Collections persisted into fields or for a long time use ToArray to minimize memory overhead.
This commit is contained in:
committed by
RoosterDragon
parent
f5f3747338
commit
82bea961ba
@@ -188,19 +188,19 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
{
|
||||
var bases = world.ActorsWithTrait<BaseBuilding>()
|
||||
.Where(a => a.Actor.Owner == world.LocalPlayer)
|
||||
.ToArray();
|
||||
.Select(b => b.Actor)
|
||||
.ToList();
|
||||
|
||||
if (!bases.Any())
|
||||
return true;
|
||||
|
||||
var next = bases
|
||||
.Select(b => b.Actor)
|
||||
.SkipWhile(b => !world.Selection.Actors.Contains(b))
|
||||
.Skip(1)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (next == null)
|
||||
next = bases.Select(b => b.Actor).First();
|
||||
next = bases.First();
|
||||
|
||||
world.Selection.Combine(world, new Actor[] { next }, false, true);
|
||||
|
||||
@@ -212,19 +212,19 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
var facilities = world.ActorsWithTrait<Production>()
|
||||
.Where(a => a.Actor.Owner == world.LocalPlayer && !a.Actor.HasTrait<BaseBuilding>())
|
||||
.OrderBy(f => f.Actor.Info.Traits.Get<ProductionInfo>().Produces.First())
|
||||
.ToArray();
|
||||
.Select(b => b.Actor)
|
||||
.ToList();
|
||||
|
||||
if (!facilities.Any())
|
||||
return true;
|
||||
|
||||
var next = facilities
|
||||
.Select(b => b.Actor)
|
||||
.SkipWhile(b => !world.Selection.Actors.Contains(b))
|
||||
.Skip(1)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (next == null)
|
||||
next = facilities.Select(b => b.Actor).First();
|
||||
next = facilities.First();
|
||||
|
||||
world.Selection.Combine(world, new Actor[] { next }, false, true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user