alcraftalcraft
alcraft / Technical / Performance & Telemetry Kennisbank

SetLoadFields gebruiken voor performance in Business Central

door Rodney · · 3 min leestijd

TL;DR — SetLoadFields beperkt welke kolommen Business Central uit SQL ophaalt bij een record-loop, wat queries dramatisch sneller maakt op brede tabellen zoals Item, Sales Line of custom tabellen met veel velden. Roep het aan vóór de eerste FindSet, FindFirst of Get, en noem alleen de velden die je daadwerkelijk leest of toekent. Pas op met CalcFields en FlowFields: die triggeren alsnog extra reads en kunnen het hele performance-voordeel ondermijnen. Geverifieerd op BC26.

Wat doet SetLoadFields

In Business Central worden tabellen achter de schermen door SQL Server bediend. Standaard haalt BC álle kolommen van een tabel op bij elke record-fetch — ook als je code maar twee velden gebruikt. Op brede tabellen zoals Item, Sales Line of custom tabellen met veel BLOB- of Text-velden is dat verspilling die zich opstapelt in loops.

SetLoadFields vertelt BC: “haal alleen deze kolommen op”. De resulterende SQL-query selecteert alleen wat nodig is.

Praktijkvoorbeeld

// Zonder SetLoadFields — haalt ~80 kolommen op per Item
Item.FindSet();
repeat
    TotalCost += Item."Unit Cost";
until Item.Next() = 0;

// Met SetLoadFields — haalt alleen 2 kolommen op
Item.SetLoadFields("No.", "Unit Cost");
Item.FindSet();
repeat
    TotalCost += Item."Unit Cost";
until Item.Next() = 0;

Op een testset van 50.000 items in een BC26-sandbox: 4,2 seconden zonder, 0,6 seconden met. De winst schaalt met tabel-breedte en aantal records.

Stappenplan

(De stappen hieronder corresponderen met de HowTo-data in de frontmatter en worden ook in JSON-LD geëxporteerd.)

Stap 1 — Identificeer de loop met performance-issues {#stap-1}

Open Application Insights en filter op event AL0000DGF (long running SQL queries). Sorteer op customDimensions.executionTimeInMilliseconds om kandidaten te vinden.

Stap 2 — Bepaal welke velden je écht nodig hebt {#stap-2}

Lees de loop-body. Vergeet de primaire sleutel niet, en eventuele velden die in SetRange/SetFilter-aanroepen voor de loop gebruikt zijn.

Stap 3 — Roep SetLoadFields aan vóór FindSet of Get {#stap-3}

Direct vóór de fetch-operatie. Volgorde van veldnamen maakt niet uit.

Stap 4 — Test op CalcFields en FlowFields {#stap-4}

Dit is waar de meeste mensen struikelen. Een vergeten CalcFields("Inventory") triggert een aparte query per record en gooit je hele winst weg.

Stap 5 — Meet het verschil {#stap-5}

Niet vertrouwen op gevoel. Vergelijk telemetrie vóór en na.

Veelgestelde vragen

(De Q&A hieronder wordt ook als FAQPage JSON-LD geëxporteerd, zodat AI-agents en zoekmachines de antwoorden direct kunnen citeren.)

Vanaf welke BC-versie is SetLoadFields beschikbaar?

SetLoadFields is geïntroduceerd in Business Central 2021 release wave 1 (BC18) en werkt in alle latere versies.

Werkt SetLoadFields ook bij Get of alleen bij FindSet?

Bij beide. Ook bij FindFirst, FindLast en iteraties via Next.

Wat gebeurt er als ik een veld lees dat niet in SetLoadFields staat?

BC haalt dat veld dan alsnog op via een extra SQL-query (just-in-time loading) — wat het hele voordeel ondermijnt.

Is SetLoadFields hetzelfde als SetAutoCalcFields?

Nee. SetLoadFields beperkt gewone kolommen, SetAutoCalcFields stuurt FlowField-berekening. Complementair.

Kan SetLoadFields breken bij toekomstige BC-updates?

Niet inherent. Wel oppassen bij code-changes: als je later extra velden gaat lezen, moet de SetLoadFields-lijst mee. Compiler-warning AL0603 helpt.

Fact-check

Geverifieerd op
29 april 2026
Volgende review
29 oktober 2026
Bronnen
Reproduceerbaar bewijs
Sandbox-test op BC26 met 50.000 Item-records: loop zonder SetLoadFields gemeten op 4.2s, met SetLoadFields op 0.6s. Telemetrie via Application Insights query op AL0000DGF events.