Pro .NET Benchmarking

by Andrey Akinshin · 2019

Apress · Springer · Google Books · O’Reilly · GoodReads · ResearchGate · Examples (GitHub) · Errata (GitHub)

Amazon US · Amazon CA · Amazon UK · Amazon DE · Amazon FR · Amazon ES · Amazon JP


  • Chapter 1 “Introducing Benchmarking”
    This chapter contains some basic information about benchmarking and other performance investigations, including benchmarking goals and requirements. We will also discuss performance spaces and why it’s so important to analyze benchmark results.
  • Chapter 2 “Common Benchmarking Pitfalls”
    This chapter contains 15 examples of common mistakes that developers usually make during benchmarking. Each example is pretty small (so, you can easily understand what’s going on), but all of them demonstrate important problems and explain how to resolve them.
  • Chapter 3 “How Environment Affects Performance”
    This chapter explains why the environment is so important and introduces a lot of terms that will be used in subsequent chapters. You will find 12 case studies that demonstrate how minor changes in the environment may significantly affect application performance.
  • Chapter 4 “Statistics for Performance Engineers”
    This chapter contains the essential knowledge about statistics that you need during performance analysis. For each term, you will find practical recommendations that will help you use statistical metrics during your performance investigations. It also contains some statistical approaches that are really useful for benchmarking. At the end of this chapter, you will find different ways to lie with benchmarking: this knowledge will protect you from incorrect result interpretation.
  • Chapter 5 “Performance Analysis and Performance Testing”
    This chapter covers topics that you need to know if you want to control the performance level in a large product automatically. You will learn different kinds of performance tests, performance anomalies that you can observe, and how to protect yourself from these anomalies. At the end of this chapter, you will find a description of performance-driven development (an approach for writing performance tests) and a general discussion about performance culture.
  • Chapter 6 “Diagnostic Tools”
    This chapter contains a brief overview of different tools that can be useful during performance investigations.
  • Chapter 7 “CPU-Bound Benchmarks”
    This chapter contains 24 case studies that show different pitfalls in CPU-bound benchmarks. We will discuss some runtime- specific features like register allocation, inlining, and intrinsics; and hardware-specific features like instruction-level parallelism, branch prediction, and arithmetics (including IEEE 754).
  • Chapter 8 “Memory-Bound Benchmarks”
    This chapter contains 12 case studies that show different pitfalls in memory-bound benchmarks. We will discuss some runtime- specific features about garbage collection and its settings; and hardware-specific features like CPU cache and physical memory layout.
  • Chapter 9 “Hardware and Software Timers”
    This chapter contains all you need to know about timers. We will discuss basic terminology, different kinds of hardware timers, corresponding timestamping APIs on different operating systems, and the most common pitfalls of using these APIs. This chapter also contains a lot of “extra” content that you don’t actually need for benchmarking, but it may be interesting for people who want to learn more about timers.


Andrey Akinshin “Pro .NET Benchmarking” (2019) DOI: 10.1007/978-1-4842-4941-3

  author = {Akinshin, Andrey},
  doi = {10.1007/978-1-4842-4941-3},
  edition = {1},
  isbn = {978-1-4842-4940-6},
  pages = {662},
  publisher = {Apress},
  title = {Pro .NET Benchmarking},
  url = {},
  year = {2019}