C# 请教XML序列化时,内存错误问题如何解决

问题描述

环境C#4.5E516G内存预计序列化后数据大小1G左右这个问题如何解决呢?代码:[List<KeyWords>listKeyWords]try{CommonHelper.CGCollect();stringxml=XmlHelper.XmlSerialize(listKeyWords,Encoding.Default);Mutexm=newMutex();if(!string.IsNullOrEmpty(xml)){DocHelper.writeXC(xml,string.Format("{0}{1}",ConfigurationInfo._KEYWORDSPATH,pathName),FileMode.OpenOrCreate,m);}}publicstaticstringXmlSerialize(objecto,Encodingencoding){using(MemoryStreamstream=newMemoryStream()){XmlSerializeInternal(stream,o,encoding);stream.Position=0;using(StreamReaderreader=newStreamReader(stream,encoding)){returnreader.ReadToEnd();}}}错误信息:System.InvalidOperationException:生成XML文档时出错。--->System.OutOfMemoryException:引发类型为“System.OutOfMemoryException”的异常。在System.IO.MemoryStream.set_Capacity(Int32value)在System.IO.MemoryStream.EnsureCapacity(Int32value)在System.IO.MemoryStream.Write(Byte[]buffer,Int32offset,Int32count)在System.Xml.XmlEncodedRawTextWriter.EncodeChars(Int32startOffset,Int32endOffset,BooleanwriteAllToStream)在System.Xml.XmlEncodedRawTextWriter.FlushBuffer()在System.Xml.XmlEncodedRawTextWriter.RawText(Char*pSrcBegin,Char*pSrcEnd)在System.Xml.XmlEncodedRawTextWriter.RawText(Strings)在System.Xml.XmlEncodedRawTextWriter.WriteStartAttribute(Stringprefix,StringlocalName,Stringns)在System.Xml.XmlEncodedRawTextWriterIndent.WriteStartAttribute(Stringprefix,StringlocalName,Stringns)在System.Xml.XmlWellFormedWriter.WriteStartAttribute(Stringprefix,StringlocalName,StringnamespaceName)在System.Xml.Serialization.XmlSerializationWriter.WriteAttribute(StringlocalName,Stringns,Stringvalue)在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write7_WordsareadataModelS(Stringn,Stringns,WordsareadataModelSo,BooleanisNullable,BooleanneedType)在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write8_WordsareadataModel(Stringn,Stringns,WordsareadataModelo,BooleanisNullable,BooleanneedType)在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write9_KeyWords(Stringn,Stringns,KeyWordso,BooleanisNullable,BooleanneedType)在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write10_ArrayOfKeyWords(Objecto)---内部异常堆栈跟踪的结尾---在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriterxmlWriter,Objecto,XmlSerializerNamespacesnamespaces,StringencodingStyle,Stringid)在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriterxmlWriter,Objecto)在Lanwatcher.Tools.XmlHelper.XmlSerializeInternal(Streamstream,Objecto,Encodingencoding)位置

解决方案

本帖最后由 ELVADUAN 于 2015-04-17 16:03:55 编辑
解决方案二:
换个思路就好了,分段操作,分段序列化,分段写入,别让内存太累。。。
解决方案三:
可以使用文件流试试try{XmlSerializerxmlFormat=newXmlSerializer(typeof(List<KeyWords>));using(StreamfStream=newFileStream(serializeFileFullName,FileMode.Create,FileAccess.Write,FileShare.None)){xmlFormat.Serialize(fStream,listKeyWords);}}catch(Exceptione){Trace.WriteLine(e.ToString());}

时间: 2024-11-18 23:51:49

C# 请教XML序列化时,内存错误问题如何解决的相关文章

c#4 0-C# 请教XML序列化时,内存错误问题如何解决

问题描述 C# 请教XML序列化时,内存错误问题如何解决 环境C#4.5 E5 16G内存 代码: try { CommonHelper.CGCollect(); string xml = XmlHelper.XmlSerialize(listKeyWords, Encoding.Default); Mutex m = new Mutex(); if (!string.IsNullOrEmpty(xml)) { DocHelper.writeXC(xml, string.Format("{0}{

c++-用new申请了一个结构体数组,delete时内存错误

问题描述 用new申请了一个结构体数组,delete时内存错误 strong text //////////////////////////////////////CLOCK算法部分//////////////////void CLOCK(){ arr *page_t; int ijpointertimes=0flag=-1num=0;//pointer为查找位置 page_t=new arr[m];//==============================开始计算============

artoolkit-ARToolkit在VS2010配置问题,链接时 LNK2019错误 (未解决)

问题描述 ARToolkit在VS2010配置问题,链接时 LNK2019错误 (未解决) #include "stdafx.h" #ifdef WIN32 #include #endif #include #include #ifndef __APPLE_ #include #define GLUT_DISABLE_ATEXIT_HACK #include #endif #include #include #include #include // // Camera configur

win8系统安装Office时提示”错误1911“的解决方法

win8系统安装Office时提示"错误1911"的解决方法 1.看到安装的过程中,一个名为INKDIV.dll的动态库文件无法正常完成注册.说明之前Office程序的参与还在,需要清理一下; 2.这个问题比较普遍,这是Office程序特有的故障,而且微软也有专用工具用以处理这样的问题.这个专用工具,是一个全英文的程序,但是操作还是比较简单的.首先下载工具.解压.百度云网盘分享路径是:全部文件 > 维护电脑 > 清理卸载 > [微软专用卸载工具]地址:http://p

Win8系统笔记本创建WiFi时提示错误1061的解决方法

Win8系统笔记本创建WiFi时提示错误1061的解决方法   解决方法如下: 1.检查笔记本电源是否连上,接上电源看是否能启用wifi共享服务. 2.设备管理-网络适配器 里面将驱动程序升级到最新(如果装的是win8驱动一般是最新的),再尝试启用共享. 3.如果前两步还没有解决,仍然提示错误1061,你就试试最麻烦的一步:准备杀毒吧. windows7教程 windows8教程 windows10教程

Win7系统共享wifi时提示错误1203的解决办法

  Win7系统共享wifi时提示错误1203的解决办法          1.点击开始按钮,在搜索框中输入cmd; 2.在显示的搜索结果中,右击cmd,选择"以管理员身份运行"; 3.在界面中依次输入netsh wlan set host mode=allow和netsh wlan start hos两个命令即可.

.NET(C#):XML序列化时派生类的处理

原文 www.cnblogs.com/mgen/archive/2011/12/03/2275014.html 目录 1. 针对基类的XmlSerializer序列化派生类 2. 类内成员是派生类的序列化   注意: 运行代码请注意添加如下命名空间: using System.Xml; using System.Xml.Serialization; using System.IO;     返回目录 1. 针对基类的XmlSerializer序列化派生类 派生类将会序列化成这样的XML: <基类

求救!!在Arcgis9.2 ArcCatalog 中发布Map server时出现错误。求解决方法!

问题描述 如题,在ArcCatalog中发布Mapserver时出现错误,在添加machine时出错提示:Machineisnotavalidservercontainer.Error:(-8003)YourArcGISServerlicensehasexpired.点击取消之后在ArcCatalog的列表中还是显示出了添加的那个机器.不管三七二十一,继续做下去,在发布的时候,又出现了这样的错误!错误提示:ServerhasnoassociatedSOCmachinesorallSOCmachi

求助:我用如下程序给图片加水印,当图片比较大时出现内存错误,不知道如何解决

问题描述 importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.geom.AffineTransform;importjava.awt.image.AffineTransformOp;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStre