当前位置: 首页 > 编程语言 > C#

C#Compact Framework – 使用XmlSerializer.Serialize的OutOfMemoryException分享

时间:2023-04-11 11:02:49 C#

C#学习教程:C#CompactFramework-OutOfMemoryExceptionusingXmlSerializer.SerializeStringWritersw;使用(sw=newStringWriter()){xs.Serialize(sw,反序列化);//此处出现OutOfMemoryException}stringpacket=sw.ToString();返回数据包;有没有更好的方法来做到这一点,还是我在做一些明显错误的事情?看起来应该可以,但CF确实有不可预知的局限性。xml是必需的吗?我不记得尝试使用20k记录,但另一种选择可能是尝试不同的序列化程序-例如CF2的protobuf-net。我不能保证它会起作用,但可能值得一试。(特别是,我正在重构代码以尝试解决CF中的一些额外的“泛型”限制——但除非您有非常复杂的对象模型,否则这不会影响您)。显示用法的示例;请注意,此示例使用XmlSerializer也能正常工作,但protobuf-net仅使用20%的空间(如果将内存中的每个字符视为两个字节,则为10%的空间):usingSystem;使用System.Collections.Generic;使用System.IO;使用System.Xml.Serialization;使用ProtoBuf;[Serializable,ProtoContract]publicclassDepartment{[ProtoMember(1)]publicstringName{get;放;}[ProtoMember(2)]publicListPeople{get;放;}}[Serializable,ProtoContract]publicclassPerson{[ProtoMember(1)]publicintId{get;放;}[ProtoMember(2)]publicstringName{get;放;}[ProtoMember(3)]publicDateTimeDateOfBirth{get;放;}}staticclassProgram{[MTAThread]staticvoidMain(){Departmentdept=newDepartment{Name="foo"};=新列表();随机rand=newRandom(123456);for(inti=0;i如果您需要更多帮助,请告诉我-我可以整天谈论这个话题;-p请注意,它只能使用标准xml属性([XmlElement(Order=1)])-I'为了清楚起见,我们使用了更具体的[ProtoMember(1)]等。这也允许对序列化进行细粒度控制(之字形与二进制补码,使用长度前缀分组等)。您有关于应用程序内存消耗的任何指标吗?我假设您正在运行WM,这意味着地址空间限制为每个进程32MB。对于大型XML,您实际上可能会耗尽内存。也许您可以考虑持久化单个对象(而不是将集合作为一个大块来持久化)。如果是这样,您可能想使用我在codeplex上创建的NFileStorage项目;nfilestorage.codeplex.com(这个不是专门为CF制作的,所以不知道是否兼容那个)...祝你好运,Gert-Jan以上就是C#学习教程的全部内容:C#CompactFramework-OutOfMemoryException使用XmlSerializer.Serialize。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢