LOAD-04Large files (1 GiB images)

Pass

All large images arrived intact and memory stayed bounded with default settings: at most 174 MB working set in the sender and 264 MB in the receiver while 8 GiB were in flight. One association moved a 1 GiB image in about 4.9 s (208 MB/s); STOW-RS stored it with default options in 2.7 s and WADO-RS read it back at 444 MB/s.

What this test proves

Shows that 1 GiB images can be written, sent, stored and read back with DicomKit while memory use stays small on both sides.

How it was run

  1. Each test image has 2,048 frames of 512x512 16-bit pixels (1 GiB of pixel data); the sender streams it and never holds the whole image.
  2. One image is written to disk with DicomFile.SaveAsync and read back.
  3. C-STORE sends 1 GiB images over 1, 2, 4 and 8 parallel associations to a DicomServer that stores them with FileSystemStoreHandler; then five studies of about 1.6 GB are sent at once.
  4. STOW-RS stores one 1 GiB image with default server options, WADO-RS reads it back and single frames are fetched from it; a second server with MaxPartBytes set to 1 GiB must refuse the same image with HTTP 413.
  5. Files are verified and deleted after each step.

How correctness was checked

The SHA-256 of the pixel data of every received 1 GiB and 512 MiB image (and of every 10th small image) was equal to what was sent; the image read back by WADO-RS had the same SHA-256; frames fetched by WADO-RS were byte-identical to the original frames.

Measured results

Step Operations Ops/s MB/s p50 p95 p99 Max Errors Peak memory
C-STORE 1 GiB, 1 at a time
2 images
2 0.2 208 4,870 ms 4,959 ms 4,959 ms 4,959 ms 0 99 MB
C-STORE 1 GiB, 2 in parallel
4 images
4 0.3 327 6,066 ms 6,476 ms 6,476 ms 6,480 ms 0 109 MB
C-STORE 1 GiB, 4 in parallel
4 images
4 0.5 500 8,139 ms 8,196 ms 8,196 ms 8,196 ms 0 174 MB
C-STORE 1 GiB, 8 in parallel
8 images
8 0.4 360 22,069 ms 22,752 ms 22,752 ms 22,752 ms 0 238 MB
5 studies at once (1 GiB + 512 MiB + 100 CT each)
510 images, one association per study
510 21.1 327 8.66 ms 18.2 ms 7,696 ms 15,681 ms 0 264 MB
STOW-RS 1 GiB with MaxPartBytes set to 1 GiB
refused with HTTP 413 as expected (the part is larger than the limit)
1 0.6 0 211 MB
STOW-RS 1 GiB, default server options 1 0.4 379 2,704 ms 2,704 ms 2,704 ms 2,704 ms 0 212 MB
WADO-RS 1 GiB, streamed 1 0.3 355 2,308 ms 2,308 ms 2,308 ms 2,308 ms 0 212 MB
WADO-RS single frames of the 1 GiB image
33 single-frame requests, one 16-frame request and one rendered frame
35 55.1 38.5 15.9 ms 38.2 ms 49.1 ms 49.1 ms 0 240 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