I came across an interesting bug in the wrapper classes for my HLSL shader effects
today. In preparation for creating a class to represent a game unit, for the purposes of
demonstrating the terrain pathfinding code that I finished up last night, I had been refactoring
my BasicModel and SkinnedModel classes to inherit from a common abstract base class, and after getting
everything to the state that it could compile again, I had fired up the SkinnedModels example
project to make sure everything was still rendering and updating correctly. I got called
away to do something else, and ended up checking back in on it a half hour or so later, to find
that the example had died with an OutOfMemoryException. Looking at Task Manager, this
relatively small demo program was consuming over 1.5 GB of memory!
I restarted the demo, and watched the memory allocation as it ran, and noticed that the memory
used seemed to be climbing quite alarmingly, 0.5-1 MB every time Task Manager updated.
Somehow, I’d never noticed this before… So I started the project in Visual
Studio, using the Performance Wizard to sample the .Net memory allocation, and let the demo run
for a couple of minutes. Memory usage had spiked up to about 150MB, in this simple demo
that loaded maybe 35 MB of textures, models, code and external libraries…