我们有一个在三个应用程序中使用的对象模型。两个程序收集数据,另一个读取数据并生成报告。这个系统非常不连贯,所以我们不能有一个单一的数据库,所有的程序都可以对话。我想要一个ORM吗?
现在,程序只是使用公共库来填充对象模型并序列化/反序列化到磁盘。具体来说,我们正在使用XML序列化。
这个模型有几个问题。 1)XML可能被认为是浪费。这些文件可能变得庞大而笨拙。老实说,文件大小现在不是一个大问题。 2)我最关心的是记忆足迹。整个文件被加载到一个对象模型中,对其进行操作,然后保存。
希望我已经表达了我的担心,在某些时候,我们会在运行时遇到有关此应用程序的内存问题。足够的数据将被收集到一个“数据库”(xml文件),它不能一次加载到内存中。
我想要的是访问我的对象模型支持文件存储而不是内存。我希望对象模型的更改最小化。当一个对象被访问时,它来自磁盘,当它被设置时,它会被保存(如果可能,会自动保存)。
我们用SQLite,SQL Compact 4.0和EF 4以及LINQ to XML(简要地)研究了NHibernate。过去我也使用db4o将对象缓存到磁盘,但那是一个无关的项目。
在我潜入并花时间学习其中之一之前,我想知道我的想法是否有意义。我可以有一个对象模型“神奇地”缓存到存储介质,而不是无限地膨胀我的内存足迹?即使它不是最优雅的,完成这件事的最短路径是什么?
是否有其他技术可以帮助我?内存映射文件,linq-to-sql,Lazy(T)(仅在需要时才从文件中获取对象)。
我意识到这是一个开放式问题。我正在寻找一个大的图片响应和细节,如果有人在那里有真实世界的经验这样做。链接将有帮助...
谢谢。
您是否因为使用移动设备而有内存问题?我问,因为我看到sql-server-ce作为标签。 – 2011-03-03 08:08:23
现在不能移动,看着SQL Server Compact,因为它可以嵌入到我的应用程序中(比如SQLite)。如果我们使用EF,SQL Compact将成为数据库后端的考虑因素。内存方面的担忧是由于它是一款32位应用程序,因此2GB的处理限制。 – Nate 2011-03-03 08:12:22
您的应用是独立应用吗?这听起来像你不想要一个集中的数据库。该应用是否为多用户?你多久更新一次?对应用程序做了多少报告?这些是您选择时重要的问题类型。 – Andrew 2011-03-03 08:31:41