【发布时间】:2010-10-01 10:17:53
【问题描述】:
在我的 Windows Mobile (.NET Compact Framework) 应用程序中,我使用一个大数组来存储应用程序的主要数据。这是一个可能包含数百个对象的数据集。每个对象有大约 10 个左右的属性和两个自身的数组,每个数组有大约 25 个其他对象,每个对象有大约 5 个属性。
为了在移动设备上保存这个数组,我只是序列化了整个数组。这在大多数情况下都很有效,而且非常非常简单。
但是,在我们的测试用例中,我们总是只使用少数对象,最多大约 50 到 75 个。但我们的客户有一些案例,用户拥有数百个这样的对象,最多 1000 个。在这些案例中,序列化速度很慢,可能需要一分钟。
实际的问题是在保存整个数组时,大多数情况下实际上只有几个对象发生了变化。所以基本流程是这样的:
- 从存储中加载整个数组,比如 400 个对象;
- 更改 1 个对象的一些属性;
- 将整个数组保存回存储器,即全部 400 个对象;
- 更改同一对象的多个属性;
- 再次保存
- 更改最终属性;
- 再次保存;
- 与任何后续对象相同...
如果不经常进行保存,通常不会有问题,但在几个中间步骤中,数据会被保存。这是为了确保所有数据都被持久化并且不会发生数据丢失(例如当电池没电时)。
我该如何解决这个问题?
【问题讨论】:
-
我对 Windows Mobile 并不特别熟悉,但对于“移动”而言,一般来说,与设备之间的传输是性能真正重要的地方。我会调整您的代码,以便您只发送/接收更改的数据。例如在您的示例中,一次只发送“几个属性”。 (请记住,数据传输通常会花费最终用户 $ 金钱 - 因此您希望它尽可能少)
-
数据传输没有问题。传输速度足够快(通常使用 Wifi 或底座中的“直接”连接)。但是内部(永久)内存(闪存、SD 卡或其他任何东西)的序列化速度很慢。
-
好的,但我认为这个问题又与修改了多少数据有关。我只会根据需要更新内部数据结构......例如更新索引“X”处的子数组以添加这 3 个项目。不要尝试将整个结构发送回设备并重新构建整个数据结构。
标签: .net arrays serialization compact-framework