In a recent project, I had a Windows Service that was receiving many thousands of requests which could only be processed at specific intervals. Soon I found that queuing so many requests in a simple Queue<T> class ran away with all my machine's memory.
So what to do?
I didn't really want to change my code. I like the Queue<T> class. So I wrote a class I call Hopper<T> which acts like Queue<T> but caches items to disk. It's constructor gives the class the information it needs to do all the work. Then you just use it like a Queue<T>.
public
Hopper(
string cachePath,
string uniqueFileExtension,
int hopperCapacity,
int reorderLevel)
This class takes advantage of the System.Runtime.Serialization and the System.Runtime.Serialization.Formatters.Binary namespaces.
Download the code and give it a try. And be sure to let me know what you think.
Hopper.zip (2.74 KB)