mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-04-20 07:56:50 +00:00
fix: move to concurrent dictionary instead of hash set for impossible routes
This commit is contained in:
parent
4a59cf9f81
commit
db14a614bc
1 changed files with 5 additions and 3 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
@ -56,8 +57,9 @@ namespace PepperDash.Essentials.Core
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Cache of failed route attempts to avoid re-checking impossible paths.
|
/// Cache of failed route attempts to avoid re-checking impossible paths.
|
||||||
/// Format: "sourceKey|destKey|signalType"
|
/// Format: "sourceKey|destKey|signalType"
|
||||||
|
/// Uses ConcurrentDictionary as a thread-safe set (byte value is unused).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly HashSet<string> _impossibleRoutes = new HashSet<string>();
|
private static readonly ConcurrentDictionary<string, byte> _impossibleRoutes = new ConcurrentDictionary<string, byte>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Indexes all TieLines by source and destination device keys for faster lookups.
|
/// Indexes all TieLines by source and destination device keys for faster lookups.
|
||||||
|
|
@ -579,7 +581,7 @@ namespace PepperDash.Essentials.Core
|
||||||
|
|
||||||
// Check if this route has already been determined to be impossible
|
// Check if this route has already been determined to be impossible
|
||||||
var routeKey = GetRouteKey(source.Key, destination.Key, signalType);
|
var routeKey = GetRouteKey(source.Key, destination.Key, signalType);
|
||||||
if (_impossibleRoutes.Contains(routeKey))
|
if (_impossibleRoutes.ContainsKey(routeKey))
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "Route {0} is cached as impossible, skipping", null, routeKey);
|
Debug.LogMessage(LogEventLevel.Verbose, "Route {0} is cached as impossible, skipping", null, routeKey);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -681,7 +683,7 @@ namespace PepperDash.Essentials.Core
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "No route found to {0}", destination, source.Key);
|
Debug.LogMessage(LogEventLevel.Verbose, "No route found to {0}", destination, source.Key);
|
||||||
|
|
||||||
// Cache this as an impossible route
|
// Cache this as an impossible route
|
||||||
_impossibleRoutes.Add(routeKey);
|
_impossibleRoutes.TryAdd(routeKey, 0);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue