Skip to main content

Performance & Quality Guidelines

This document serves as an index of "Common Pitfalls" and recommended practices for WepNG. Refer to the dedicated documents for detailed examples and solutions.

🛑 Critical Anti-Patterns

Pattern NameImpactDescription
N+1 QueriesPerformanceExecuting a query for each item in a list. The #1 performance killer.
Loop of DeathTimeout / CrashAnalyzing/Saving deep object graphs inside nested loops.
Sync-over-AsyncDeadlocksUsing .Result or .Wait() on async tasks in ASP.NET.
Resource LeaksInstabilityUn-disposed DataContext objects consuming memory.
Swallowed ExceptionsHidden BugsEmpty catch {} blocks that hide critical failures.
Untracked Fire-and-ForgetData LossUsing Task.Run without tracking, risking data loss on AppPool recycle.
Client-Side EvaluationMemoryFetching all rows (ToList) before filtering in memory.
Blocking I/OStarvationSending emails or HTTP requests synchronously.
Session LockingUX LatencySerialized execution of requests due to ASP.NET session locks.

🛠️ Stabilization Strategy

All performance remediations must follow the Performance Stabilization Skill.

🟢 Best Practices

Command/Query Separation (CQS)

To break away from "God Controllers", separate operations:

  • Query: Asks for data, modifies nothing. (e.g., GetOrderById)
  • Command: Modifies data, returns no complex data. (e.g., ApproveOrder)