I get regular marketing emails from e-buyer offering lots of shiny technology at competitive prices, and I have noticed how for around £300 you can have a pretty reasonable laptop with Vista pre-installed. When I say reasonable I mean it has 2GB of RAM. My work laptop has 3GB of RAM and the more recent 64 bit ones ship with 4GB RAM. Right now, I have SQL Server 2008 running with Management Studio open, as well as Visual Studio 2008, Windows Media Player, IE8 with a few tabs, a PowerShell window and of course Windows Live Writer. I am not yet using half of the available RAM.
What's my point? Are we so conditioned to writing ultra-resource-sparing programs that we are not being perhaps as efficient as we could be? Should we be writing more applications that are prepared to be greedy should the conditions allow? If there are plenty of idle cores can you perform some potential work at risk? Can you just pull all your resources into memory if there is plenty of that available? It might deliver a better experience compared to getting them on demand and making the user wait; and then find the disk busy. If more applications did this then perhaps my laptop could idle the disk.
Why did I bring this up? People have been comparing how efficient the upcoming browsers are when they have loads of tabs open etc. I'd just like to see smarter efficiency. If my browser can see that I am not under memory pressure then I am more than happy for it to be greedy if the conditions are right and the user experience would really benefit.
There are APIs to help you determine whether a computer is in a power saving energy profile. This can trigger a change in application behaviour to help towards this goal. For example: don't be CPU greedy by spawning lots of background niceties, get everything you know about off disk quick and perhaps drop graphic enhancements - this allows the CPU to drop to a slower clock speed, the disk to idle and the GPU to cool off. But how about if the user has chosen a maximum performance profile? What can you do to make your application really fly should there be an abundance of resources? I am not saying any of this is new because there are plenty of example of this thinking in CPU design all the way up to modern OSes like Vista. I am just not sure that it has filtered into regular application development mindsets.