序列化和反序列化大文件

时间:2009-12-23 16:03:12

标签: c# serialization

有没有什么好的方法可以在c#中对大文件(> 10M)进行序列化和反序列化。

提前致谢。

4 个答案:

答案 0 :(得分:1)

你可以查看我对这个问题的答案here(那里也有各种其他相关答案)。

我的方法使用BinaryReader和BinaryWriter来提高性能。

我使用此方法在最近的项目中反序列化50MB文件,与内置序列化或Xml序列化(我的数据集为10分钟)相比,它可以非常快速地(在5秒内)完成。

答案 1 :(得分:1)

de / serializing小文件或大文件之间没有任何区别。你只需要确保不要将非常大的文件反序列化到内存中,这会给你买OOM。

大文件当然会花费更多时间。如果这使您的用户界面无响应,那么您将希望在后台线程中执行此处理。 BackgroundWorker是一种典型的解决方案。

黑暗中的随机拍摄顺便说一下,你的问题太模糊了。

答案 2 :(得分:1)

您确定序列化/反序列化是获取这么多数据的正确方法吗?也许像SQLite这样的客户端数据库是一个更好的解决方案,您可以在其中查询所需的确切数据,而不是仅将所有内容加载到内存中?

答案 3 :(得分:0)

如果你真的有大文件(假设大于100 MB),那么最好只加载你目前需要的东西。

假设您有一个包含10,000个客户的列表,每个客户都有一个图像。将此列表保留在内存中是没有意义的。

例如,您可以在文件中加载所有姓氏和人员的位置。因此,用户可以搜索一个人,你可以正好加载那个人。

另一种可能性是加载前十个并将其显示给用户。只要他点击“下一步”按钮,您就可以加载下一个 - 只需计划如何组织信息。

数据库可以带来一些优势,而不是非常大的文件。他们可以抽象出在文件中导航所需的大量工作。

然而,在我看来,使用BinaryFormatter等的“单行序列化”在那个大小的文件中达到了极限。你必须考虑其他概念。