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 = 0; i < 100000000; 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 = 0; i < 100000000; 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其实它只是一个框架。凡是二进制汇编等能实现的事情,高级语言也是都能实现的。计算机无非就是一个二进制的运算。它可以将数据写入内存,定然也可以将数据写入硬盘。毕竟这种事情我们每天都在做。只是忽略了它。所以我要打破自己的思维限制,大胆设想!

转载于:https://www.cnblogs.com/honghong75042/p/3303093.html

c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter相关推荐

  1. 使用文件流的形式在浏览器下载word文档

    一.使用文件流的形式在浏览器下载word文档 String path = "http://172.16.228.130:7300/document/d9dd1ec7e72d4fc6a9e50 ...

  2. pdf以文件流的形式导出乱码问题解决

    将后台文件传给前端,目的要实现附件下载的效果:  实际上返回的是一堆乱码 解决方案: //attachment就是附件的形式返回,不加attachment就是文件流输出到前端,即乱码现象 respon ...

  3. php 下载.csv,php 文件流的形式下载csv

    使用文件流下载csv原因 使用php 下载excel 经常会因为文件太大 导致内存不足 下载失败 直接上代码 $columns = [ 'u_id', '用户姓名' ]; $items=[[" ...

  4. uniapp图片地址以文件流的形式传给后端

    安装image-tools 图像转换工具,可用于图像和base64的转换 点我前往 安装 npm i image-tools --save 引用 import { pathToBase64, base ...

  5. c语言fclose的作用,文件读写完后fclose()就内存溢出,该怎么处理

    文件读写完后fclose()就内存溢出 linux环境下编译的 #include #include typedef struct { char *CardCode; char *Name; char  ...

  6. 文件下载:POI读取word或Excel,修改内容后以流的形式输出到前端

    以下是WORD实例,此方案适用于EXCEL,不用使用绝对路径,对于数据安全有一定保障 /*** @author lcx* @param id * @param request* @param resp ...

  7. axios 请求接口获取文件流数据导出数据到excel,解决乱码

    axios.get("URL",{params:{data1:data1,data2:data2},headers: { 'Content-Type': 'application/ ...

  8. matlab编译错误怎么查找,matlab - Matlab mex文件编译错误-“未启用SSE2指令集” - 堆栈内存溢出...

    在Matlab中编译mex文件的工具箱时,出现以下错误: In file included from /home/josh/Desktop/Project/code/toolbox/channels/ ...

  9. mysql workbench 1064_mysql - MySQL Workbench中的正向工程输出错误1064 - 堆栈内存溢出

    这是MySQL Workbench在进行正向工程时创建的脚本: -- MySQL Workbench Forward Engineering SET @OLD_UNIQUE_CHECKS=@@UNIQ ...

最新文章

  1. linux查询重复数据库,Linux如何使用locate命令查找数据搜索数据库
  2. springboot yml怎么建常量_【Java】SpringBoot 中从application.yml中获取自定义常量
  3. 反对迭代0:停止拖延,开始迭代
  4. 华为2013校园招聘上机笔试题
  5. python实现排序算法_python实现·十大排序算法之插入排序(Insertion Sort)
  6. leetcode 775. Global and Local Inversions | 775. 全局倒置与局部倒置(Java)
  7. 台式电脑键盘按键错乱_收藏篇:电脑键盘上的每个按键的作用和命令你都会用么...
  8. python笔记记录(包和模块)
  9. sessionstorage ie8下跨页面_前端页面布局困难?教你用盒子模型一招解决
  10. c# 指定打开某个路径下的CMD_Node.js 环境在 Windows 系统下安装与搭建教程
  11. sql prompt插件的安装
  12. 工作之余可以回味的经典
  13. 【树莓派】基于树莓派,实现无线路由功能
  14. Microsoft Excel 教程「41」,如何在 Excel 图表中添加标题?
  15. linux nohup的使用及详解
  16. omnipeek查询设备发送beacon时同一信道两个beacon发送间隔
  17. 文件上传:避免重复上传
  18. 【基础强训】day4
  19. 看还是不看,这是一个问题
  20. 删除中间和后面的星号

热门文章

  1. 数据结构之:链表详解
  2. Keil4编译原子哥的SYSTEM出现错误 Inline assembler not permitted when generating Thumb code
  3. 2d的公式_用深度学习实现 2D 到 3D 的转换
  4. Linux上的Systemctl命令
  5. c++中的enum类型
  6. crontab定时任务运行
  7. 概率论-1.2概率的定义及其确定方法
  8. [BUUCTF-pwn]——[ZJCTF 2019]EasyHeap
  9. AbstractListView源码分析8
  10. 四级计算机网络选择题,2015全国计算机等级考试四级计算机网络模拟选择题