We should also mention that often you don't even need to use a timer. If the structure/flow of your program allows it, you may be able to break down the operations into small chunks. Each triggering an event to move onto the next operation.
For example, my UPNP control point has no idea what is on the network. It sends out a search request and receives responses from all the media devices. I can then browse each one. When browsing a device I find out how many items there are and only request the first 100, once these have been received I trigger another request for the next 100 and so on until all items have been browsed. No timer, just simple handshaking.
Of course I needn't browse all the items as only the ones being displayed to the user are actually required.
Also I've seen many times, here in the Forum, people struggling with large databases. Often the problem is that a query is set to return many thousands of results, but only a very small subset of these are actually required. At any moment in time the end user can only view so much data when displayed on a small screen. Its often about rationalising what is required.
Maybe your requirement is similar? Could you get some of the required data, apply some calculations and then grab more data? Spliting the programming into manageable chunks rather than one big loop! You may even find that the code can be reduced as new functions are created and reused?
Ramblings over
RandomCoder