Most custom shipping app where generating 500 warehouse pick labels takes time, Telemetry keeps pointing at the data layer, but the query is always perfectly healthy.The real culprit?Most systems spend 80% of its time repeatedly invoking the document layout engine inside a loop.A standard reporting pattern had been dropped straight into a data‑processing routine—completely unaware…
Read articleLatest articles
Microsoft Dynamics 365 Business Central
I was reviewing an integration architecture for a client whose external WMS needed to know immediately when a Sales Invoice was posted.The middleware team’s solution?A hyper-aggressive polling script hammering the salesInvoices API every 5 seconds, non-stop, 24/7.When we pulled the telemetry, the truth was brutal:99.2% of those requests returned zero changes.That meant thousands of pointless…
Read articleI have once hunted down a error that manifests differently during debugging or fails to manifest in other scenarios. This would cause the actual process to fail. Certain functionality would only fail like 5% of the time. The error comes from a different extension event subscriber. Because their code was part of my transaction, my…
Read articleNo errors. No crashes. Just a line of 20 tasks stuck in “In Process” for hours. The culprit? Every single task was locked in a battle to update the same “Sequence No.” field on a setup table. They were not just running code, they were holding the database hostage in a synchronized deadlock dance. One…
Read articleWe have all seen it, situation where a client complains their custom Status Dashboard crawls. You dig into the code and find a massive stack of SetRange and SetFilter calls on a table with millions of rows.Even with proper indexes, the SQL optimizer can choke when overloaded with too many filters. The result? Suboptimal execution…
Read articleHave you ever investigated a “ghost data” bug where heavy integration was reading old values from BC cache. Most of us developers opt to clear the cache by sprinkling Database.SelectLatestVersion() across the code like confetti. Sure, data will be fresh, but performance-wise, it will be tanked. SelectLatestVersion is a nuclear option. ⚠️ The Problem: Global…
Read articleI once inherited a project where clicking “Post” on a Sales Order took 5 seconds to respond. The culprit? A global event subscriber on the Sales Line table calculating royalties.The problem wasn’t the logic, it was the scope. That subscriber was firing for every single user, even those who never touched royalty-bearing items. In effect,…
Read articleWhy spend hours deleting millions of rows one by one? DeleteAll(false) still logs and locks every record. Truncate() bypasses all that noise, no logging, no triggers, just instant cleanup at the SQL level. Perfect for staging tables and nightly jobs that need speed without drama. ✖️ The Problem – When cleanup job crawlA client once…
Read article✖️ The problem – row by row insertStill looping with repeat…until to push rows from a staging table into a live table? Even with SetLoadFields, you’re still doing row-by-row inserts a massive bottleneck for large datasets. 🛠️ The Fix – Data Transfer ObjectThe set-based way to move millions of rows in milliseconds. Instead of thousands…
Read articleWe have already tackled SQL Indexing and SIFT. But there’s another silent performance killer hiding in many extensions: the N+1 problem.Are you still using repeat…until on table A, only to perform a Get or SetRange on table B inside that loop? You are making thousands of round-trips to the SQL server. It’s time to move…
Read article