We have a pretty sizable .NET rich client app that currently uses nHibernate and Firebird embedded for persistence. Due to the nature of the app, we need to load the entire database into memory when the file is loaded, so we get all the costs of an ORM without many of the benefits. The main benefit we do get is the ability to write upgrade code to transition the structure of the data between versions.
We're finding that this setup is both slow and memory intensive (unsurprisingly, given that we're not using it as intended). We could move to a document/KVP DB, but again, given that we're not doing any on-demand loading or searching, it doesn't feel like the right solution.
I've toyed with the idea of binary serialization and somehow archiving off the 'persistence' namespace so that we could load an old format, but it seems a bit of a convoluted approach to what I would think would be a common problem.
What are our options?