c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter
1、XmlTextWriter 表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议)的流或文件。
public class XmlTextWriter : XmlWriter XmlTextWriter继承抽象类 XmlWriter
XmlTextWriter 小例子:
string resultFileName = "c:/44.txt";
if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(resultFileName)))
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(resultFileName));
} XmlTextWriter result = new XmlTextWriter(resultFileName, null);
result.Formatting = Formatting.Indented;
result.WriteStartElement("PolicyList");
result.WriteStartElement("Policy");
result.WriteAttributeString("username", "USERNAME"+i.ToString());
result.WriteEndElement();
result.WriteEndElement();
result.Close();
XmlTextWriter 之所以不产生内存溢出是因为它是以流的形式将数据写入硬盘中的。
2、 我做了一个XmlTextWriter 与普通拼接字符的形式对比:
XmlTextWriter
string resultFileName = "c:/44.txt";
if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(resultFileName)))
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(resultFileName));
} XmlTextWriter result = new XmlTextWriter(resultFileName, null);
result.Formatting = Formatting.Indented;
result.WriteStartElement("PolicyList");
for (int i = ; i < ; i++)
{
result.WriteStartElement("Policy");
result.WriteAttributeString("username", "USERNAME"+i.ToString());
result.WriteEndElement();
}
result.WriteEndElement();
result.Close();
普通:
XmlDocument xmlD = new XmlDocument();
StringBuilder sb = new StringBuilder();
for (int i = ; i < ; i++)
{
sb.Append("<PolicyList username='USERNAME"+i.ToString()+"' />");
}
xmlD.LoadXml(sb.ToString());
StreamWriter sw = new StreamWriter("c:/55.txt");
sw.Write("www");
sw.Close();
第一个正常显示,第二个则出现内存溢出提示。所以在大数据量的时候。一定要写成流的形式,这样可以防止内存溢出。
3、由这件事情让我想到好多
以前我们用.net写输出时,没想过要将数据写到硬盘。如果出现内存溢出就无计可施。其实我当时真的没想过要讲数据写入硬盘吗?错了,我想到过。但是我马上否定了我自己,总感觉这是不可能实现的事情。这就是思维限制。我的思维已经受限。后来我想.net其实它只是一个框架。凡是二进制汇编等能实现的事情,高级语言也是都能实现的。计算机无非就是一个二进制的运算。它可以将数据写入内存,定然也可以将数据写入硬盘。毕竟这种事情我们每天都在做。只是忽略了它。所以我要打破自己的思维限制,大胆设想!
c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter的更多相关文章
- 拼接xml时出现内存溢出解决办法
/// designed by Alex /// 解决内存溢出问题,不可使用迭代器和foreach /// 循环遍历List, 别生成xml,一边释放 /// 反向遍历,相当于出栈,避免索引顺序乱的问 ...
- Ajax异步请求返回文件流(eg:导出文件时,直接将导出数据用文件流的形式返回客户端供客户下载)
在异步请求中要返回文件流,不能使用JQuery,因为$.ajax,$.post 不支持返回二进制文件流的类型,可以看到下图,dataType只支持xml,json,script,html这几种格式,没 ...
- 将字符串以用二进制流的形式读入XML文件
其实将字符串写入XML文件本身并不复杂,这里只是写一些需要注意的地方,特别是编码格式,这里需要的是XML默认的编码方式是UTF-8,在对字符串进行编码的时候一定要注意, string strRecei ...
- java以流的形式输出文件
原文:http://blog.csdn.net/liutt55/article/details/78126614 public void downProcessFile(HttpServletRequ ...
- vue项目,axios请求图片接口,接口返回的是文件流的形式,如何转换成图片?
axios .get('/captcha', { params: param, responseType: 'arraybuffer' }) .then(response => { return ...
- VS生成项目时,有些文件无法复制到输出目录的解决办法
有时候,我们在生成项目时,发现有些文件如:.jpg的图片文件,无法复制到输出目录中,此时会非常纠结,反复的清理项目,重新生成,依旧不能解决此问题.后来我打开.csproj的项目工程文件时,经过对比发现 ...
- 基于VUE利用pdf.js实现文件流形式的pdf显示
首先推荐大家看一下这个demo vue-pdf.js-demo,这里面包含固定本地地址,远程pdf地址,通过打开文件的方式打开pdf 这儿我们着重介绍一下通过文件流的形式打开pdf.(所谓文件流,就是 ...
- php将文件转换成二进制输出[转]
header( "Content-type: image/jpeg"); $PSize = filesize('1.jpg'); $picturedata = fread(fope ...
- Java中常用IO流之文件流的基本使用姿势
所谓的 IO 即 Input(输入)/Output(输出) ,当软件与外部资源(例如:网络,数据库,磁盘文件)交互的时候,就会用到 IO 操作.而在IO操作中,最常用的一种方式就是流,也被称为IO流. ...
随机推荐
- U盘启动时无USB-HDD选项的解决方案
今天在使用一块老板子的时候 发现没有USB-HDD启动项 在启动顺序中只有 USB-ZIP(ZIP) -FDD(软盘) -CDROM(光驱) 1.插入U盘 2.开机 3.在BIOS中找到Hard D ...
- 做10年Windows程序员与做10年Linux程序员的区别(附无数评论)(开源软件相当于熟读唐诗三百首,不会作诗也会吟)
如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章 ...
- android map高德地图显示多个点,并且每个marker点可以响应鼠标点击事件,处理跳转页面
定义一个数组,然后将要显示的markers放进数组里面,让后循环每个marke对象,赋予监听事件,在监听事件里面写其它需要的功能: js举例: var arr = new Arry(); var ma ...
- (\S)? 匹配0个或者一个前导字符
---------------------------------------------- "1" 模式: \"(?<id>(\S+)?)\" ? ...
- perl 获取阿里云主机信息
use LWP::UserAgent; use Data::UUID; use Data::GUID; use HTTP::Date qw(time2iso str2time time2iso tim ...
- Hdu1384-Intervals(差分约束)
Problem Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.Wr ...
- 【HDU 4612 Warm up】BCC 树的直径
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4612 题意:一个包含n个节点m条边的无向连通图(无自环,可能有重边).求添加一条边后最少剩余的桥的数 ...
- Linux Java的环境变量搭建
JAVA JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载完后,解压完并将其中的jdk文件夹移动到/u ...
- 强制IE浏览器或WebBrowser控件使用指定版本显示网页
自从装了IE10之后,就发现好些个网站显示都不是那么的正常,网站上有些功能竟然还会出现一些意想不到的BUG——本来就是针对IE开发的,现在IE下竟然用不起来了,让用户情何以堪?但是就为少量用户使用的系 ...
- Function.prototype.call.apply结合用法
昨天在网上看到一个很有意思的js面试题,就跟同事讨论了下,发现刚开始很绕最后豁然开朗,明白过来之后发现还是挺简单的,跟大家分享下! 题目如下: var a = Function.prototype ...