有没有什么好的方法可以在c#中对大文件(> 10M)进行序列化和反序列化。
提前致谢。
答案 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等的“单行序列化”在那个大小的文件中达到了极限。你必须考虑其他概念。