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:
RoosterDragon
2014-05-23 19:52:44 +01:00
committed by RoosterDragon
parent f5f3747338
commit 82bea961ba
44 changed files with 151 additions and 126 deletions

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
string selectedUid;
// May be a subset of available maps if a mode filter is active
List<string> visibleMaps;
string[] visibleMaps;
ScrollPanelWidget scrollpanel;
ScrollItemWidget itemTemplate;
@@ -103,7 +103,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
selectedUid = uid;
scrollpanel.ScrollToItem(uid, smooth: true);
};
randomMapButton.IsDisabled = () => visibleMaps == null || visibleMaps.Count == 0;
randomMapButton.IsDisabled = () => visibleMaps == null || visibleMaps.Length == 0;
}
EnumerateMaps(onSelect, filter);
@@ -158,7 +158,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
scrollpanel.AddChild(item);
}
visibleMaps = maps.Select(m => m.Uid).ToList();
visibleMaps = maps.Select(m => m.Uid).ToArray();
if (visibleMaps.Contains(selectedUid))
scrollpanel.ScrollToItem(selectedUid);
}