Rewording my question in an attempt to make it On-Topic:
We have a client (only one client out of many) that is consistently getting an Out of Memory exception with our software. I feel like we've eliminated the usual suspects that would cause this and am looking for ideas of what other things (less standard causes) that might cause an OOM. Specifically, since this seems to be specific to a single customer, could it be caused by something wrong in the hardware, OS, or .Net install?
Here are the things I am aware of that cause an OOM and why I believe we've eliminated them as suspects:
1 - OOM caused by system running out of memory. Why Not? Because the system has several GB available when these exceptions occur.
2 - OOM caused by process running out of memory due to over allocation or memory leaks. Why Not? Because the process is using only about 100MB of memory at the time of the exceptions. We have monitored the memory usage for days (on the system in question) and have not noticed any significant increase in memory usage.
3 - OOM caused by running out of other system resources such as file handles, etc. Why Not? The exceptions are happening, exclusively, during run-of-the-mill memory allocations, not while opening a file or connecting to a socket.
4 - OOM caused by attempting to allocate a large array with excessive memory fragmentation. Why Not? The memory blocks that we are allocating are fairly small (640x480x2, for the most part). With so much memory available, I have trouble believing that it could be so fragmented that something like that would fail.
So, just to be clear, I am not asking "Why doesn't my code run?" My code does run, on all machines but one. I'm not asking anyone to debug my code. My question is: "What other possible causes, besides those we've eliminated, could be resulting in an Out of Memory exception?" Or, "Am I missing something that could have caused me to eliminate one of the known causes prematurely?"