I was wondering what the limitations are (performance and otherwise) for in memory collections.

I am building a new solution which will hold a lot of data. Normally I would use SQL Server to store the data. The solution is basically a business management solution. Storing customer and employee data. Processing sales, and various other things.

I have a book on WPF and its showing that that each class, customer, employee, transactions. etc, are being stored in a List<> which is serialized and saved. Instead of using 3rd party databases with my software.

I'm wondering how this works for a real-time program. would there be any performance difference between having say, 50,000 records in SQL vs. the same amount in a list collection? I'm assuming that when I desearialize the class all records are loaded into memory. How much RAM would this program use having 50k records in a list at run-time?

What other options do I have? I don't like using the open source MySQL and MS SQL is ungodly expensive. If I use It I will be limiting my software sales to only rich people, leaving almost all small businesses out.

Is using a database server the only option I have?