Cache nodeRegionMap

This commit is contained in:
glax 2024-07-25 00:52:25 +02:00
parent 7833eb5e83
commit edc0cd01f4

View File

@ -12,6 +12,7 @@ public class RegionLoader(float regionSize, string? importFolderPath = null, ILo
internal readonly string ImportFolderPath = Path.Join(importFolderPath ?? Environment.CurrentDirectory, regionSize.ToString(CultureInfo.InvariantCulture));
private const string NodesMapRegionFileName = "nodes.map";
private const string WayMapRegionFileName = "ways.map";
private Dictionary<ulong, long>? nodeRegionDict = null;
public Graph.Graph? LoadRegionFromRegionId(long regionId)
{
@ -81,24 +82,30 @@ public class RegionLoader(float regionSize, string? importFolderPath = null, ILo
public Graph.Graph? LoadRegionFromNodeId(ulong nodeId)
{
logger?.LogDebug($"Loading Region for Node {nodeId}");
using StreamReader nodesMapFileStream = new(Path.Join(ImportFolderPath, NodesMapRegionFileName), Encoding.ASCII);
while (!nodesMapFileStream.EndOfStream)
if (nodeRegionDict is null)
{
string? line = nodesMapFileStream.ReadLine();
if(line is null)
continue;
try
nodeRegionDict = new();
using StreamReader nodesMapFileStream = new(Path.Join(ImportFolderPath, NodesMapRegionFileName), Encoding.ASCII);
while (!nodesMapFileStream.EndOfStream)
{
ulong id = ulong.Parse(line.Split('-')[0]);
if (id == nodeId)
return LoadRegionFromRegionId(long.Parse(line.Split('-')[1]));
}
catch (Exception e)
{
logger?.LogError(e, "Error parsing Node-line.");
string? line = nodesMapFileStream.ReadLine();
if(line is null)
continue;
try
{
ulong id = ulong.Parse(line.Split('-')[0]);
long regionId = long.Parse(line.Split('-')[1]);
nodeRegionDict.TryAdd(id, regionId);
}
catch (Exception e)
{
logger?.LogError(e, "Error parsing Node-line.");
}
}
}
if (!nodeRegionDict.TryGetValue(nodeId, out long rId))
return LoadRegionFromRegionId(rId);
logger?.LogWarning($"Could not find Node {nodeId}");
return null;
}