LOAD-03DICOMweb (QIDO-RS, WADO-RS, STOW-RS)
Pass
No errors at any step; most steps at 32-64 clients were limited by the PC's CPU. The FileSystemDicomWebStore that ships as a reference store keeps every instance's metadata in memory: after 96,772 instances the server held 3,003 MB of managed memory (about 32 KB per instance), so a large archive needs its own IDicomWebStore.
What this test proves
Shows the speed of DicomKit's DICOMweb server and client under concurrent use, and that what comes back is correct.
How it was run
- An ASP.NET Core (Kestrel) app with MapDicomWeb and the FileSystemDicomWebStore runs in its own process, preloaded with 10,000 images (CT 512x512 and MR 256x256 in 400 studies).
- DicomWebClient runs each operation for 15 s with 1, 8, 32 and 64 concurrent clients: QIDO-RS study search, WADO-RS instance retrieval, WADO-RS rendered JPEG, STOW-RS of a new MR image.
How correctness was checked
Every QIDO-RS answer had the expected number of studies; every WADO-RS instance had the right pixel data length and the SHA-256 of every 50th was equal to the original; every rendered answer was a complete JPEG; every STOW-RS reported the image stored.
Measured results
| Step | Operations | Ops/s | MB/s | p50 | p95 | p99 | Max | Errors | Peak memory |
|---|---|---|---|---|---|---|---|---|---|
| QIDO-RS, 1 client | 1,555 | 104 | 8.71 ms | 14.4 ms | 17.7 ms | 119 ms | 0 | 240 MB | |
| QIDO-RS, 8 clients | 12,938 | 862 | 9.16 ms | 10.4 ms | 11.6 ms | 30 ms | 0 | 294 MB | |
| QIDO-RS, 32 clients the PC's CPU was saturated (98 % on average) |
32,460 | 2,163 | 14.4 ms | 18.7 ms | 23.1 ms | 48.6 ms | 0 | 366 MB | |
| QIDO-RS, 64 clients the PC's CPU was saturated (99 % on average) |
33,379 | 2,223 | 26.6 ms | 49.2 ms | 65.9 ms | 135 ms | 0 | 302 MB | |
| WADO-RS instance, 1 client | 1,232 | 82.1 | 16.7 | 10 ms | 19.3 ms | 24.5 ms | 46.3 ms | 0 | 307 MB |
| WADO-RS instance, 8 clients | 8,614 | 574 | 116 | 11.4 ms | 22.2 ms | 31.4 ms | 334 ms | 0 | 296 MB |
| WADO-RS instance, 32 clients the PC's CPU was saturated (94 % on average) |
17,485 | 1,163 | 234 | 21.9 ms | 46 ms | 58.3 ms | 361 ms | 0 | 295 MB |
| WADO-RS instance, 64 clients the PC's CPU was saturated (95 % on average) |
18,077 | 1,201 | 241 | 46.2 ms | 102 ms | 157 ms | 474 ms | 0 | 300 MB |
| WADO-RS rendered JPEG, 1 client | 2,182 | 145 | 7.4 | 5.69 ms | 10.9 ms | 22.4 ms | 53 ms | 0 | 379 MB |
| WADO-RS rendered JPEG, 8 clients | 14,574 | 971 | 48.7 | 6.77 ms | 13 ms | 26.3 ms | 48.1 ms | 0 | 399 MB |
| WADO-RS rendered JPEG, 32 clients the PC's CPU was saturated (95 % on average) |
31,168 | 2,074 | 104 | 12.2 ms | 31.2 ms | 43.7 ms | 89.9 ms | 0 | 505 MB |
| WADO-RS rendered JPEG, 64 clients the PC's CPU was saturated (98 % on average) |
33,159 | 2,204 | 111 | 26.1 ms | 54.5 ms | 71.9 ms | 124 ms | 0 | 523 MB |
| STOW-RS, 1 client | 3,800 | 253 | 31.7 | 3.69 ms | 5.54 ms | 7.97 ms | 33 ms | 0 | 520 MB |
| STOW-RS, 8 clients | 19,762 | 1,317 | 165 | 5.88 ms | 6.76 ms | 9.29 ms | 60.3 ms | 0 | 1,356 MB |
| STOW-RS, 32 clients | 31,895 | 2,125 | 266 | 14.2 ms | 18.4 ms | 36.8 ms | 99 ms | 0 | 2,856 MB |
| STOW-RS, 64 clients | 31,315 | 2,085 | 261 | 28.9 ms | 41.4 ms | 80.1 ms | 101 ms | 0 | 3,926 MB |
Latency is per operation (p50 = median, p95/p99 = 95th/99th percentile). Memory is the peak working set of the test process.
Test run
- Run
- a20bedea-bacd-468b-af8d-945829c4b81f
- Started (UTC)
- 2026-10-26 17:02:46, finished 2026-10-26 18:52:45
- Test PC
- Intel(R) Core(TM) i9-14900K, 24 cores / 32 threads, 64 GB RAM, NVMe SSD, Microsoft Windows 11 Pro build 26200.9711, .NET 10.0.12 (one PC, client and server on loopback)
- License
- Enterprise
- Source commit
- b804fb7
- DicomKit
- 1.0.0 SHA-256 96ada39062c07bca37511abfb6baac0a44d914fb705bac01d77cb02146fdac0e
- DicomKit.Imaging
- 1.0.0 SHA-256 015b51ea833039d934ba153cae50d393fb77846430ca3fc3d65b4fb8cf4346ed
- DicomKit.Web
- 1.0.0 SHA-256 2a2f4f7f02e1849929294062bee7dd8f3a24449428469c1fddb6982e77218a7b
- DicomKit.Web.AspNetCore
- 1.0.0 SHA-256 daa1105881f1c0b60ca9c788d52d41445bd653a9d190c8862a2b2b1386d5e37c