Docs · Exporter

Speed and benchmarks

Only measured figures are quoted here.

How it is measured

  • Whole-model export, the way users export.
  • Same Revit session for BMC and Autodesk, with the same export settings (the georef preset and Autodesk’s matching configuration).
  • Model opening time excluded on both sides.
  • BMC’s time is the Revit read (snapshot) plus the Rust conversion, end to end.
  • Autodesk’s time is Document.Export.
  • Round-tripping the IFC through another tool is not export speed and is not counted.

Results

ModelAutodeskBMC readBMC RustBMC totalFaster
RAC sample20.1 s10.6 s0.7 s11.3 s1.8×
DACH sample53.5 s26.8 s0.9 s27.7 s1.9×
451 MB high-rise1111 s158.9 s4.9 s163.8 s6.8×

RAC and DACH are Autodesk’s sample projects. Those figures are medians of five runs on an idle machine (2026-11-05). The high-rise is a client model with 41,794 IFC products. BMC’s run there was in a fresh Revit session on 2026-11-08; Autodesk’s run was on 2026-11-06.

Where the time goes

Almost all of the read is Revit itself. On the samples, Revit API calls take about 93% of the main-thread time, garbage collection about 5%, and BMC’s own code under 2% (0.2–0.3 s). Most of the remaining cost is Revit computing values the IFC needs, such as computed areas and volumes (73% of parameter-reading time on the high-rise). Further gains come from asking Revit for less, not from faster C#.

What was tuned

Measured on the high-rise, each step against its own baseline. The output stayed identical after every step.

StepMeasuredBeforeAfter
GC batching. Collect garbage every 512 MB of allocation instead of every ~16 MBread372 s206 s
Fewer temporary Parts. Walls and floors that can only get one part need noneread211 s175 s
Micro-optimisations. Fewer repeated API reads, fewer leftover API wrappers, a faster Rust allocator and parserread + Rust189 s164 s

Tried and not worth it: moving the read off Revit’s main thread (BMC’s own share is under 2%), and several other levers on the large model. Ruled out by design: several Revit processes in parallel, and cloud or headless Revit.

Re-export cache

After small edits (a fix, a filled parameter), the cache re-reads only the elements that changed and reuses the rest. On the high-rise, cached re-exports took 6.6–22.3 s against about 146 s for a full export, and the output passed every comparator layer against a full export of the same state.

The cache is opt-in. Its rule: re-reading more is acceptable, missing a change is not. It is tested with scripted edit suites and 240 rounds of random edits on the samples, including closing, reopening and saving the model. Saving the cache costs time on that export (about 165–174 s instead of ~146 s on the high-rise) and disk space (about 0.07 GB for RAC, 2.1 GB for the high-rise).