You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
dotnet run --project benchmarks/MarkdownLd.Kb.Benchmarks -c Release -- --filter "*GraphLifecycleBenchmarks*"
1317
1317
MARKDOWN_LD_KB_BENCHMARK_PROFILE=cpu dotnet run --project benchmarks/MarkdownLd.Kb.Benchmarks -c Release -- --filter "*FuzzyEditDistanceBenchmarks*"
1318
1318
```
1319
1319
1320
-
Benchmark reports are written to `artifacts/benchmarks/results` as Markdown, CSV, and full JSON. The reports are intentionally ignored by git because they depend on the local machine and current system load. PR validation runs `FuzzyEditDistanceBenchmarks` as a mandatory smoke benchmark and uploads the reports as the `benchmark-smoke` artifact. The full benchmark workflow in `.github/workflows/benchmarks.yml` runs manually or on the weekly schedule and uploads the complete `benchmarkdotnet-results` artifact. The benchmark config adds one default `ShortRun` job only when the command does not already pass `--job`, `--job=...`, or `-j`.
1320
+
Benchmark reports are written to `artifacts/benchmarks/results` as Markdown, CSV, and full JSON. The reports are intentionally ignored by git because they depend on the local machine and current system load. PR validation and the dedicated workflow in `.github/workflows/benchmarks.yml` both run the complete BenchmarkDotNet suite and upload the `benchmarkdotnet-results` artifact. The benchmark config adds one `Default` job only when the command does not already pass `--job`, `--job=...`, or `-j`.
1321
1321
1322
1322
The exported BenchmarkDotNet reports include the diagnostic columns that matter for this library:
1323
1323
@@ -1343,82 +1343,92 @@ Latest local benchmark run, executed on May 3, 2026 with BenchmarkDotNet 0.15.8,
Allocationand GC columns come directly from BenchmarkDotNet diagnosers. Treat the ratios and relative pressure inside the same run as the useful signal; ShortRun is a fast diagnostic pass, not a release-grade SLA measurement.
1391
+
Allocation, GC, work-item, and lock-contention columns come directly from BenchmarkDotNet diagnosers. Treat ratios and relative pressure inside the same run as the useful signal; local numbers are diagnostics, not release-grade SLA measurements.
1390
1392
1391
1393
Persistence and export on the `LargeCorpus` profile:
1392
1394
1393
1395
| Method | Mean | StdDev | Allocated |
1394
1396
| --- | ---: | ---: | ---: |
1395
-
| `CreateSnapshot` | 4.527 ms | 0.008 ms | 5.31 MB |
1396
-
| `SerializeTurtle` | 9.203 ms | 0.088 ms | 18.07 MB |
1397
-
| `SerializeJsonLd` | 13.157 ms | 0.086 ms | 20.31 MB |
1398
-
| `SaveTurtleToFile` | 29.853 ms | 0.122 ms | 34.74 MB |
1399
-
| `SaveJsonLdToFile` | 38.144 ms | 1.436 ms | 37.02 MB |
1400
-
| `LoadTurtleFromFile` | 35.983 ms | 0.373 ms | 28.10 MB |
1401
-
| `LoadJsonLdFromFile` | 99.980 ms | 2.262 ms | 75.32 MB |
1397
+
| `CreateSnapshot` | 4.494 ms | 0.0045 ms | 5.18 MB |
1398
+
| `SerializeTurtle` | 9.249 ms | 0.0436 ms | 18.07 MB |
1399
+
| `SerializeJsonLd` | 12.371 ms | 0.0586 ms | 20.31 MB |
1400
+
| `ExportMermaidFlowchart` | 5.884 ms | 0.0899 ms | 7.15 MB |
1401
+
| `ExportDotGraph` | 6.039 ms | 0.0050 ms | 7.55 MB |
1402
+
| `SaveTurtleToFile` | 29.641 ms | 0.1868 ms | 34.74 MB |
1403
+
| `SaveJsonLdToFile` | 38.491 ms | 1.5349 ms | 37.02 MB |
1404
+
| `LoadTurtleFromFile` | 35.708 ms | 0.8051 ms | 28.10 MB |
1405
+
| `LoadJsonLdFromFile` | 90.663 ms | 2.9780 ms | 75.32 MB |
1406
+
1407
+
Broad graph lifecycle:
1408
+
1409
+
| Method | Mean | StdDev | Allocated | Gen0 | Gen1 | Gen2 | Work items |
| Short deletion | 6.793 ns | 94.900 ns | 13.97x | 0 B | 112 B |
1419
-
| Short substitution | 32.973 ns | 83.927 ns | 2.55x | 0 B | 112 B |
1420
-
| Long insertion | 22.062 ns | 8,261.735 ns | 374.48x | 0 B | 640 B |
1421
-
| Long no-match | 53.873 ns | 9,292.649 ns | 172.49x | 0 B | 672 B |
1428
+
| Short deletion | 6.726 ns | 94.380 ns | 14.03x | 0 B | 112 B |
1429
+
| Short substitution | 33.756 ns | 82.509 ns | 2.44x | 0 B | 112 B |
1430
+
| Long insertion | 21.894 ns | 8,244.786 ns | 376.58x | 0 B | 640 B |
1431
+
| Long no-match | 53.268 ns | 9,208.866 ns | 172.88x | 0 B | 672 B |
1422
1432
1423
1433
This run reflects the allocation-focused search hot-path pass: BM25 now uses the shared allocation-aware tokenizer, direct scoring loops, and bounded top-N match retention; fuzzy edit distance uses stack-backed bit-vector masks for short residual tokens and pooled rows for the long-token fallback; and Tiktoken search keeps only bounded top-N candidates while TF-IDF weighting updates dictionary values without temporary key arrays.
0 commit comments