- Introduction - [[Welcome]] - [[What you should know]] - Approaching Efficiency - [[Clearing up the misconceptions]] - [[Rule 1 - Code efficiency]] - [[The first rule applied to new code]] - [[Rule 2 - You don't know the problem]] - [[Areas of efficiency]] - [[Rule 3 - Understand what's under your control]] - [[Rule 4 - Always look for the easy win]] - [[Embrace your constraints]] - [[Areas not covered]] - Measurement - [[Code analysis tools]] - [[General monitoring tools]] - [[Detailed monitoring tools - Mac]] - [[Detailed monitoring tools - PC]] - [[Overview of developer-focused tools]] - [[Web application tools]] - Memory - [[Core concepts of memory usage]] - [[The memory footprint of an application]] - [[Strategies for memory efficiency]] - [[Languages and environment issues]] - Algorithmic Efficiency - [[Introduction to algorithmic efficiency]] - [[Basic measurement]] - [[Low-tech tracing and profiling]] - [[Example - Tracing and profiling in JavaScript]] - [[Example - Tracing and performance counters in .NET]] - [[Introduction to Big O complexity]] - [[What to look for in code]] - Disk-Based and Network Resources - [[Disk-based resources]] - [[Speed expectations]] - [[Strategies for disk I/O]] - [[Network efficiency]] - [[Strategies for network efficiency]] - [[What about database efficiency?]] - Conclusion - [[Next steps]]