Short question: does anyone have any information about what the memory performance of Linq is with large amounts of data? Specifically Linq to Datasets or Linq to Objects.
What is the largest number of records / objects it can handle? What is the memory overheads? Can anyone post some ballpark memory usage figures?
Background
My company interacts with an external database (which shall remain unnamed due to excessive crapness) with very poor performance. It has an ODBC interface that works well for basic SELECTS, but with a few JOINs performance falls off a cliff (and woe to anyone who tries to use OUTER JOINS!).
Previously we've solved this issue by making a copy of the data with SELECT * FROM Table statements into a SQL database and running our queries from SQL. However, we'd like to remove the SQL server from the equation (removing external dependencies).
The solution I have in mind is to do SELECT * FROM Table into some DataSets (or possibly custom objects) and use Linq to do all the queries in memory.
The data we interact with is limited to 2GB in size (and we don't need to load it all up at once, probably only a few hundred MB at maximum). However, I'm worried about seeing the dreaded OutOfMemoryException for larger amounts of data. Hence my question.
The ODBC driver is 32bit, so I can't use a 64bit process (not without piping data between two processes, and I'd prefer to keep the complexity to a minimum). The ODBC driver is read only.
Other comments or suggestions regarding this are welcome too (with the exception of using an embedded database like SQL Compact, that's our plan B if in memory queries aren't feasible).
PS: I am doing some proof of concept benchmarks over the next few days (and I am aware that there will be specifics for my case that will only be known with those benchmarks), but I'd like to see someone has already had experience with this.
Edit: This is going to be deployed using ClickOnce as a Windows Forms app.