Fayrik: don't worry about it. Ram doesn't really wear out.
No, you won't wear out the RAM that way.
Thank Armok for that! Now that I don't have to overhaul the entire program, I might just stand a chance at getting this project somewhere decent.
However, is there any particular reason you're freeing the memory every frame? My experience with C# is pretty limited, and I'm pretty sure it handles allocations automatically, so maybe you're not actually freeing the memory. But if you are explicitly doing so, could you find a way to just overwrite the memory instead of freeing and reallocating it?
C# does all the footwork for me. If the object were an integer or such, I could just throw it into obscurity and it'd do the rest for me... But it's an image, so while throwing it into obscurity will get it collected like everything else, it would still leak... It's kind of complicated, but all it means is that I have to call a Bitmap.Dispose() when I'm done with it.
As for overwriting it, that sounds like something I'd like to do, however the Dispose() method may be the key that means this isn't possible, since as mentioned above, it's not the Bitmap object that doesn't get deleted, it's the stuff inside it.
...That said, I've just discovered that I wasn't calling the Dispose() method on the bitmap when I was assigning the new one... And adding the Dispose() method has created no visible changes to the way the program's memory is reacting.
So, after looking into it while writing this, it looks like I can't directly overwrite the memory, though there could be ways around it, they feel to me that they'd be even slower.
(Read: Manually setting every pixel of the bitmap every frame.)
That said, I still can't tell if it's overwriting for me or not. But such is the world of memory management in C#.
As for "real world" performance, the method seems to be quite quick. I can get 40 fps on this machine, and expect that it wouldn't drop far on slower machines.