请教保存数据的问题。

pslh 2008-09-10 12:57:49
环境:c#2008或vb2008

我的程序中使用的用户数据,非常复杂,基本上全部都是自定义的类,原来用过access数据库,但使用数据库除了速度上较慢之外,自定义类却没法保存。后来,不用数据库了,直接把这些类的实例用二进制序列化的方法进行保存,这样,存、取速度都非常的快!运行也快,但问题也出现了:偶尔会出现一次在打开(反序列化)上次保存的数据文件时,抛出“在分析完成之前就遇到流结尾”的异常,分析此文件的数据时,发现里面都是“0”,再也无法还原这些数据了。这个问题出现的机会大约有几百分之一吧,但也严重地影响了软件的稳定。

各位大侠,有没有好的解决办法呢?指教一下好吗?

多谢了啊!
...全文
216 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
pslh 2008-09-23
  • 打赏
  • 举报
回复
不知是否与硬盘有关系
chenlh 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zhujiechang 的回复:]
几百分之几,不可能,应该说.net的序列化不存在这种情况,除非代码中有其他的问题,
考虑到你其他应用都比较好,就是在这点方面,建议你还是找出这百分之几的原因,
我们也做过序列化的应用,在服务端持续运行了几个月了,还从没过类似这种序列化几率的问题,
同样采用的是二进制序列化方式。
[/Quote]
代码问题,我这里也常用,没出现问题
pslh 2008-09-18
  • 打赏
  • 举报
回复
sm.Seek(0, SeekOrigin.Begin)
用这个方法后,还会出现同样的异常。如,流的长度为10,会访问到第11个字节。
pslh 2008-09-18
  • 打赏
  • 举报
回复
Xml序列化有严重的缺陷,不能保存 引用。
mafgm 2008-09-16
  • 打赏
  • 举报
回复
赞成 Xml序列化代替二进制序列化
january03 2008-09-16
  • 打赏
  • 举报
回复
是否有对象没有释放?
pslh 2008-09-16
  • 打赏
  • 举报
回复
sm.Seek(0, SeekOrigin.Begin);
这个方法也用了,无效呀~~~
royal1 2008-09-15
  • 打赏
  • 举报
回复
加上代码:

Stream sm = new Stream();
sm.Seek(0, SeekOrigin.Begin);
kaixin4444 2008-09-14
  • 打赏
  • 举报
回复
解决方法很简单,我给你写一个。哈哈。快给分吧。
wolf_life 2008-09-14
  • 打赏
  • 举报
回复
支持。。没做过
pslh 2008-09-14
  • 打赏
  • 举报
回复
楼上,可有好办法?谢谢!
zhujiechang 2008-09-14
  • 打赏
  • 举报
回复
几百分之几,不可能,应该说.net的序列化不存在这种情况,除非代码中有其他的问题,
考虑到你其他应用都比较好,就是在这点方面,建议你还是找出这百分之几的原因,
我们也做过序列化的应用,在服务端持续运行了几个月了,还从没过类似这种序列化几率的问题,
同样采用的是二进制序列化方式。
行者无疆-Kevin 2008-09-13
  • 打赏
  • 举报
回复
关注.这样保存数据总是不太好管理,出错以后都无法恢复.请注意.
wolf_life 2008-09-12
  • 打赏
  • 举报
回复
顶。。关注
LovingAlison 2008-09-12
  • 打赏
  • 举报
回复
引用 9 楼 zhzuo 的回复:
楼主是否可以考虑一下Xml序列化代替二进制序列化。
http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/objserializ.asp

赞成这个方案。我其中做过的一个东西,也涉及到非常多的对象的序列化问题,由于需要上传到数据库中使用二进制的模式非常复杂,而且不利于维护。
所以我们后来采用了XML序列化的方案,虽然文件的大小增长了许多,但是从来没有出现过存储上的问题…
pslh 2008-09-12
  • 打赏
  • 举报
回复
准备改为soap方式。
但在一文章中看到“vs2003和2005的序列化结果几乎不能共享,这是soap格式序列化时的问题”,不知是不是真的?
如果是真的,那以后要是再出个vs2010,是否能共享2008的呢?
jacklee_008 2008-09-12
  • 打赏
  • 举报
回复
guanzhu
jacklee_008 2008-09-12
  • 打赏
  • 举报
回复
guanzhu
tianmingl 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tigerlgf 的回复:]
在反序列化时,看是否有异常发生.
[/Quote]

序列化和反序列化时都log一下,应该是有异常,我以前遇到过
brallow 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhzuo 的回复:]
楼主是否可以考虑一下Xml序列化代替二进制序列化。
http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/objserializ.asp
[/Quote]
赞成这个方案。我其中做过的一个东西,也涉及到非常多的对象的序列化问题,由于需要上传到数据库中使用二进制的模式非常复杂,而且不利于维护。
所以我们后来采用了XML序列化的方案,虽然文件的大小增长了许多,但是从来没有出现过存储上的问题。无论是本地保存还是数据库保存都很正常。
加载更多回复(11)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧