perf(abcip): bounded-parallel tag reads (MaxConcurrentReads, default 8)

This commit is contained in:
Joseph Doherty
2026-08-16 04:02:40 -04:00
parent 5df793e79a
commit d6a4fbd648
4 changed files with 340 additions and 20 deletions
@@ -82,6 +82,18 @@ public sealed class AbCipDriverOptions
/// </summary>
public bool EnableDeclarationOnlyUdtGrouping { get; init; }
/// <summary>
/// Upper bound on how many planned read work items (whole-UDT groups + per-tag fallbacks)
/// one <c>ReadAsync</c> batch may have in flight against the controller at once. Bounds
/// concurrency ACROSS tags only — the per-tag runtime lock (05/STAB-4) still serialises
/// Read → GetStatus → Decode against any one cached libplctag handle, so the same tag
/// requested twice in a batch never overlaps itself. Raising it lets libplctag overlap
/// device round trips (the whole point: a strictly sequential batch pays one full round
/// trip per tag); lowering it to <c>1</c> restores strictly sequential reads. Values below
/// <c>1</c> are clamped to <c>1</c> at the use site.
/// </summary>
public int MaxConcurrentReads { get; init; } = 8;
/// <summary>
/// Timeout for the AdminUI Test Connect probe, in seconds. The AdminUI clamps to a
/// 60s server-side maximum; this default is what the form pre-fills for new instances.