背景:
我有一个 Access 数据库 (.mdb) 文件,其中包含六个表。这个文件大约 300MB 大,所以不是很大,但足够大,我想提高效率。其中有一个主表,一个客户表。其他表存储数据,例如进行的咨询,一些额外的多对一字段,诸如此类。
任务:
我必须编写一个程序来将此 Access 数据库转换为一组 XML 文件,每个客户端一个。这是一个数据库转换应用程序。
选项:
(照我看来)
以不可变对象的形式将整个 Access 数据库加载到内存中
List
,然后使用 Linq 在这些列表中查找我需要的关联数据。- 好处:
- 易于并行化。
ThreadPool
为每个客户端启动一个线程。因为所有对象都是不可变的,它们可以在线程之间自由共享,这意味着所有线程都可以随时访问所有数据,并且它们都只加载一次。
- 易于并行化。
- (可能的)缺点:
- 可能会使用额外的内存、加载孤立的项目、不再需要的项目等。
- 好处:
使用 Jet 在数据库上运行查询以根据需要提取数据。
- 好处:
- 重量可能更轻。仅加载需要的数据,并且在需要时加载。
- (可能的)缺点:
- 可能更重!可能会多次加载项目,因此会使用更多内存。
- 可能很难并行化,除非 Jet/OleDb 支持并发查询(有人可以确认/否认吗?)
- 好处:
还有什么想法?
StackOverflows 对解决此问题的最佳方法有何想法?