{
  "title": "Instraxis-run plotting backend comparison",
  "report": "Streaming, replacement and concurrent analysis",
  "campaign": "campaign-final",
  "completed": "2026-09-11",
  "scope": "Single explicit float64 X/Y series in a chart harness; not complete Instraxis Control acquisition, logging or file-loading performance.",
  "statistic": "Nearest-rank p95 combined cycle in milliseconds, pooled across three accepted fresh-process repetitions; lower is better.",
  "timer": "Append/replacement API, range request, library/window processing, UI pumping and DwmFlush. Not physical display latency, FPS or isolated GPU time.",
  "protocol": {
    "runs": "78/78 accepted: 72 chart processes and 6 no-chart runtime baselines. Three repetitions per configuration.",
    "replay": "30 seconds of precomputed immutable input, published every 10 ms, at most 30 requested chart updates/s. All history retained; no ring eviction.",
    "viewport": "Latest 1M points, switching to a historical 10M-point region for the last 250 ms of each 2-second interval.",
    "replacement": "20 complete X/Y replacements per process, cycling three precomputed datasets; includes the first replacement. Selected image captures and settling pauses occur between timed cycles; not an uninterrupted maximum-rate loop.",
    "concurrent": "Replay plus a common application-worker algorithm over an immutable 10M-point region, requested once/s. Not vendor-native analysis or Control analysis capacity.",
    "aggregation": "Latency events pooled across three processes; faster processes can contribute more events. Acceptance, memory and drain values are medians of per-run values."
  },
  "environment": {
    "cpu": "Intel Core i7-10700 @ 2.90 GHz; 8 cores / 16 threads",
    "ram": "32 GiB; configured 2933 MHz",
    "gpu": "Intel UHD Graphics 630; driver 31.0.101.2140",
    "os": "Windows 11 Pro, build 26200; Balanced power plan",
    "display": "1920 × 1080, reported 59 Hz; 1000 × 650 chart client",
    "runtime": ".NET 10 x64 WinForms for Instraxis Plot, ProEssentials and SciChart (WPF ElementHost); .NET Framework 4.8 x64 WinForms for LightningChart"
  },
  "backends": [
    {
      "id": "instraxis-plot",
      "label": "Instraxis Plot",
      "version": "Instraxis Plot · 8f1c7b8",
      "revision": "8f1c7b8fde1369f4d76d623d970729a756f126ce"
    },
    {
      "id": "pe",
      "label": "ProEssentials 11",
      "version": "11.0.0.2"
    },
    {
      "id": "scichart",
      "label": "SciChart 9",
      "version": "9.0.0.29196"
    },
    {
      "id": "lc",
      "label": "LightningChart 10",
      "version": "10.0.1.4001"
    }
  ],
  "scenarios": [
    {
      "id": "stream-100m-1m",
      "label": "Stream · 100M points + 1M samples/s",
      "mode": "stream",
      "initialCount": 100000000,
      "rate": 1000000,
      "values": [
        21.18,
        701.82,
        36.07,
        283.81
      ],
      "note": "100M initial points grow to 130M after final catch-up. Instraxis Plot had the lowest p95 update cycle in this tested configuration.",
      "delivery": "Within 30 seconds, Instraxis Plot accepted 29.96M of the 30M scheduled new samples (99.87%); 40,000 remained at the boundary. All four backends reached 130M with no missing input after catch-up.",
      "acceptancePercent": [
        99.87,
        96.63,
        99.87,
        98.73
      ],
      "drainMs": [
        8.73,
        679.87,
        125.43,
        264.13
      ]
    },
    {
      "id": "stream-10m-100k",
      "label": "Stream · 10M points + 100k samples/s",
      "mode": "stream",
      "initialCount": 10000000,
      "rate": 100000,
      "values": [
        20.99,
        115.74,
        35.71,
        52.85
      ],
      "note": "10M initial points grow to 13M after catch-up. Instraxis Plot had the lowest p95 update cycle in this tested configuration.",
      "delivery": "Instraxis Plot accepted 99.87% of scheduled new input within 30 seconds. All four backends retained 13M points with no missing input after catch-up.",
      "acceptancePercent": [
        99.87,
        99.47,
        99.87,
        99.87
      ],
      "drainMs": [
        7.85,
        81.81,
        24.67,
        41.29
      ]
    },
    {
      "id": "stream-100m-100k",
      "label": "Stream · 100M points + 100k samples/s",
      "mode": "stream",
      "initialCount": 100000000,
      "rate": 100000,
      "values": [
        20.88,
        600.59,
        34.78,
        250.32
      ],
      "note": "100M initial points grow to 103M after catch-up. Instraxis Plot had the lowest p95 update cycle in this tested configuration.",
      "delivery": "Instraxis Plot accepted 99.87% of scheduled new input within 30 seconds. All four backends retained 103M points with no missing input after catch-up.",
      "acceptancePercent": [
        99.87,
        96.9,
        99.87,
        99.13
      ],
      "drainMs": [
        9.33,
        533.44,
        108.56,
        213.29
      ]
    },
    {
      "id": "replace-10m",
      "label": "Replace all X/Y · 10M points",
      "mode": "replace",
      "initialCount": 10000000,
      "rate": 0,
      "values": [
        73.11,
        60.59,
        94.34,
        231.53
      ],
      "note": "ProEssentials had the lowest p95 cycle for complete 10M-point replacement in this campaign.",
      "delivery": "Twenty full X/Y replacements per process, with three processes per backend. Conversion, allocation and index or geometry rebuilding in each adapter remain inside the measurement."
    },
    {
      "id": "replace-100m",
      "label": "Replace all X/Y · 100M points",
      "mode": "replace",
      "initialCount": 100000000,
      "rate": 0,
      "values": [
        497.3,
        441.7,
        595.7,
        2877.9
      ],
      "note": "ProEssentials had the lowest p95 cycle for complete 100M-point replacement. SciChart used the least additional process-private memory above its own source-preallocated empty-chart baseline for borrowed-array replacement.",
      "delivery": "The four-vendor results use one frozen campaign. Later Instraxis Plot development measurements are not substituted into this table."
    },
    {
      "id": "concurrent-100m-100k",
      "label": "Stream + analysis · 100M points + 100k/s",
      "mode": "concurrent",
      "initialCount": 100000000,
      "rate": 100000,
      "values": [
        20.96,
        616.68,
        35.17,
        233.45
      ],
      "note": "Instraxis Plot had the lowest p95 chart update cycle while a common application worker analyzed a historical region.",
      "delivery": "The same raw-data algorithm runs over a 10M-point region in every harness. This measures chart behavior under contention, not vendor-native analysis speed or the analysis capacity of Instraxis Control."
    }
  ],
  "limitations": [
    "One workstation, one series, short replay. Does not establish multichannel capacity, long-duration reliability or performance on another PC.",
    "Vendor adapters use different supported APIs, runtime and storage paths. Same application-level workload does not mean identical implementation.",
    "Precomputed replay excludes waveform generation and external-device acquisition/transfer. Chart capacity does not establish Control DataTable, logging or file-loading capacity.",
    "Selected image checkpoints were reviewed; every timed frame was not validated pixel by pixel. Narrow raster slits in dense waveforms remain a known limitation of the tested snapshot.",
    "Instraxis-run results are not independent certification or vendor-published benchmark results. Later Instraxis Plot improvements are excluded from this frozen comparison."
  ],
  "source": {
    "publisher": "Instraxis",
    "access": "Local experiment report and finalized CSV summaries reviewed 11 September 2026. This file is a curated numerical summary, not the raw event dataset."
  }
}
