Micro-optimizations to Remove Additional Warnings
- Reduce LINQ overhead by replacing SingleOrDefault and filtering logic with manual iteration. - Use HashSet and case-insensitive comparisons for faster lookups. Both of these changes resolve a number of HAA0401 warnings: Possible allocation of reference type enumerator; non-ValueType enumerator may result in a heap allocation.
This commit is contained in:
parent
3faeb80e55
commit
f965d476a1
@ -42,7 +42,7 @@ public static class BotParser
|
|||||||
foreach (var filePath in botFiles)
|
foreach (var filePath in botFiles)
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
if (i % 100 == 0) Console.WriteLine($"Processing file {i.ToString()}");
|
if (i % 500 == 0) Console.WriteLine($"Processing file {i.ToString()}");
|
||||||
ProcessBotFileSync(baseBots, filePath, parsedBotIds, totalDupeCount);
|
ProcessBotFileSync(baseBots, filePath, parsedBotIds, totalDupeCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,15 +84,14 @@ public static class BotParser
|
|||||||
|
|
||||||
int dupeCount = 0;
|
int dupeCount = 0;
|
||||||
|
|
||||||
List<Datum> bots = [];
|
List<Datum> bots = new List<Datum>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Parse the bots inside the json file
|
// Parse the bots inside the json file
|
||||||
using (var reader = new StreamReader(filePath))
|
using (var reader = new StreamReader(filePath))
|
||||||
{
|
{
|
||||||
var deSerialisedObject = JsonSerializer.Deserialize<Root>(reader.ReadToEnd(), serialiserOptions);
|
var deSerialisedObject = JsonSerializer.Deserialize<Root>(reader.ReadToEnd(), serialiserOptions);
|
||||||
|
foreach (var botData in deSerialisedObject.data.ToList())
|
||||||
foreach (var botData in deSerialisedObject.data)
|
|
||||||
{
|
{
|
||||||
// Bot fucks up something, never allow it in
|
// Bot fucks up something, never allow it in
|
||||||
if (botData._id == "6483938c53cc9087c70eae86")
|
if (botData._id == "6483938c53cc9087c70eae86")
|
||||||
@ -101,10 +100,22 @@ public static class BotParser
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var baseBot = baseBots.SingleOrDefault(bot => bot.botType.ToString().Equals(botData.Info.Settings.Role, StringComparison.OrdinalIgnoreCase));
|
var role = botData.Info.Settings.Role;
|
||||||
|
var botType = Enum.Parse<BotType>(role, true);
|
||||||
|
|
||||||
|
Bot baseBot = null;
|
||||||
|
foreach (var bot in baseBots)
|
||||||
|
{
|
||||||
|
if (bot.botType == botType)
|
||||||
|
{
|
||||||
|
baseBot = bot;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (baseBot == null)
|
if (baseBot == null)
|
||||||
{
|
{
|
||||||
//Console.WriteLine($"Skipping {botData._id} due to unknown role {botData.Info.Settings.Role}");
|
Console.WriteLine($"Skipping {botData._id} due to unknown role {botData.Info.Settings.Role}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +132,7 @@ public static class BotParser
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"File parse fucked up: {filePath}");
|
Console.WriteLine($"File parse fucked up: {filePath}");
|
||||||
throw;
|
throw;
|
||||||
@ -153,9 +164,9 @@ public static class BotParser
|
|||||||
await Task.WhenAll(tasks.ToArray());
|
await Task.WhenAll(tasks.ToArray());
|
||||||
stopwatch.Stop();
|
stopwatch.Stop();
|
||||||
|
|
||||||
|
|
||||||
return [.. parsedBotsDict.Values];
|
|
||||||
LoggingHelpers.LogToConsole($"Cleaned and Parsed: {parsedBotsDict.Count.ToString()} bots. {totalDupeCount.ToString()} dupes were ignored. Took {LoggingHelpers.LogTimeTaken(stopwatch.Elapsed.TotalSeconds)} seconds");
|
LoggingHelpers.LogToConsole($"Cleaned and Parsed: {parsedBotsDict.Count.ToString()} bots. {totalDupeCount.ToString()} dupes were ignored. Took {LoggingHelpers.LogTimeTaken(stopwatch.Elapsed.TotalSeconds)} seconds");
|
||||||
|
|
||||||
|
return parsedBotsDict.Values.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<int> ProcessBotFile(
|
private static async Task<int> ProcessBotFile(
|
||||||
@ -168,17 +179,27 @@ public static class BotParser
|
|||||||
|
|
||||||
int dupeCount = 0;
|
int dupeCount = 0;
|
||||||
|
|
||||||
List<Datum> bots = [];
|
List<Datum> bots = new List<Datum>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Parse the bots inside the json file
|
// Parse the bots inside the json file
|
||||||
using (var reader = new StreamReader(filePath))
|
using var reader = new StreamReader(filePath);
|
||||||
|
var deSerialisedObject = await JsonSerializer.DeserializeAsync<Root>(reader.BaseStream, serialiserOptions);
|
||||||
|
|
||||||
|
var botTypesLower = new HashSet<string>(botTypes, StringComparer.OrdinalIgnoreCase);
|
||||||
|
var filteredBots = new List<Datum>();
|
||||||
|
foreach (var botData in deSerialisedObject.data.ToList())
|
||||||
{
|
{
|
||||||
var deSerialisedObject = JsonSerializer.Deserialize<Root>(reader.ReadToEnd(), serialiserOptions);
|
var roleLower = botData.Info.Settings.Role.ToLower();
|
||||||
bots.AddRange(deSerialisedObject.data.Where(botData => botTypes.Contains(botData.Info.Settings.Role.ToLower())));
|
if (botTypesLower.Contains(roleLower))
|
||||||
|
{
|
||||||
|
filteredBots.Add(botData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bots.AddRange(filteredBots);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"File parse fucked up: {filePath}");
|
Console.WriteLine($"File parse fucked up: {filePath}");
|
||||||
throw;
|
throw;
|
||||||
@ -235,8 +256,9 @@ public static class BotParser
|
|||||||
|
|
||||||
if (jItemsToReplace != null && jItemsToReplace.Any())
|
if (jItemsToReplace != null && jItemsToReplace.Any())
|
||||||
{
|
{
|
||||||
foreach (var item in jItemsToReplace)
|
|
||||||
LoggingHelpers.LogToConsole($"file {fileName} has {jItemsToReplace.Count().ToString()} json issues, cleaning up.", ConsoleColor.Yellow);
|
LoggingHelpers.LogToConsole($"file {fileName} has {jItemsToReplace.Count().ToString()} json issues, cleaning up.", ConsoleColor.Yellow);
|
||||||
|
var jItemsToReplaceList = jItemsToReplace.ToList();
|
||||||
|
foreach (var item in jItemsToReplaceList)
|
||||||
{
|
{
|
||||||
var obj = new { x = 1, y = 0, r = 0 };
|
var obj = new { x = 1, y = 0, r = 0 };
|
||||||
item.Replace(JToken.FromObject(obj));
|
item.Replace(JToken.FromObject(obj));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user