Compilers Don't Know That
Compilers Don't Know That
Ersatz Report On Regaining .NET Application Performance
About the Book
.NET is a fantastic platform to lose performance. It has a nice set of high-level languages, powerful standard library and lots of useful assemblies available. Its runtime is so good you don't have to worry about effectiveness most of the time. You just build your application one layer of abstraction over another until it's ready. Of course, every layer eats up a bit of performance, but it's a fair trade-off: you sure loose some machine cycles here and there, but you win in productivity because of a high-level environment.
Yet once in a while, you may run into a situation, when you do have to worry about performance. For me, it was with the image processing application I wrote in 2013. It was working fine with my own test pictures, which were relatively small. But the very first real world user tried to process a 10 000 x 20 000 px page scan with it and the whole thing just hanged. It was working well, but as the processing took over several minutes, it was considered not responding and forced to quit.
Usually, it's the algorithm. Algorithmic improvements can be the most drastic, but I knew from my experience, that the mathematical model behind the product was hardly an issue. It is nothing more a light-weight polynomial model combined with a simple affine transformation. So the problem had to be in the environment. Somehow trivial tasks appeared to be much more time consuming than they look.
To peek inside these seemingly trivial things, I had to use disassembler. I took ILDasm for getting intermediate language assembly code and a Visual Studio built-in disassembler for the machine-level code. This way I learned quite a lot about how .NET works including C# compilation, just-in-time compilation, library data types and methods. The experience obtained helped me make the tightest parts of my code up to 100 times faster. A huge gain.
Now I want to share this experience with you.
- Special Thanks
- Local Variables and Constants
Reading From Bitmap
- Designated Method
- Working With Data Copy
- Direct Data Access
- A Bit of Projective Geometry
- A Bit of Linear Algebra
- Standard Library Method
- Mathematics Behind Inverse Matrix Computation
Plain Calls And Delegates
- Plain Calls
- Appendix A. Motivational talk
Appendix B. How to Read x86/x64 Disassembler Output
- Structure of Disassembly
- Data Types
- Calling Procedure
- Conclusion and Further Reading
The Leanpub 60-day 100% Happiness Guarantee
Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.
See full terms
80% Royalties. Earn $16 on a $20 book.
We pay 80% royalties. That's not a typo: you earn $16 on a $20 sale. If we sell 5000 non-refunded copies of your book or course for $20, you'll earn $80,000.
(Yes, some authors have already earned much more than that on Leanpub.)
In fact, authors have earnedover $12 millionwriting, publishing and selling on Leanpub.
Learn more about writing on Leanpub
Free Updates. DRM Free.
If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).
Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.
Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.