数据-菜鸟求教!C#大文本处理如何提速?

问题描述

菜鸟求教!C#大文本处理如何提速?

有个几百兆的文件,里面全是数据,每一行都要处理,如:
GOTO / 8.39900, -4.61009, 115.00000
要转换成
LIN {E6POS: X 8.39900, Y -8.37946, 115.00000, A 0.000, B 0.000, C 0.000, E1 0.000} C_VEL

现在是小文件可以,数据量大了速度就非常慢,1M的都要7分钟才能处理完

解决方案

难怪代码慢,你还用了字符串相加。

你应该用 StringBuilder 代替直接连接字符串。

另外我说了,ReadLine效率非常低。

解决方案二:

用内存映射+线程
Net 4.0中引入了System.IO. MemoryMappedFiles

解决方案三:

C# 啊,用 StreamReader.ReadLine() 方法整行读,解析出3个值,再用 StreamWriter.WriteLine() 方法整行写。
100M都不用7分钟吧。你写的程序绝对是差到家了。

解决方案四:

之前的要引用api函数
http://www.cnblogs.com/criedshy/archive/2010/06/13/1757826.html

解决方案五:

不要用 StreamReader.ReadLine() 方法整行读,这个时间全部浪费在IO上了,应该用内存映射文件或者分块读。

解决方案六:

while ((readstr = sr.ReadLine()) != null)
{
if (readstr.StartsWith("RAPID"))//速度标记
{
strtemp = readstr + "rn";
strtemp += mystr;
mystr = strtemp;
}
else if (readstr.StartsWith("GOTO"))//坐标转换(插入、替换字符)
{
strtemp = readstr;
strtemp = strtemp.Replace("GOTO /", "LIN {E6POS: X");
strtemp = strtemp.Insert(strtemp.IndexOf(',') + 1, " Y");
strtemp = strtemp.Insert(strtemp.LastIndexOf(',') + 1, " Z");
strtemp += lastaddstr + "rn";
strtemp += mystr;
mystr = strtemp.Replace(" ", " ");
mystr = mystr.Replace(" ", " ");
}
progressBar1.Value++;

            }

解决方案七:

原来不止是单线程,还因为你在不停的组织字符串,导致GC释放内存

解决方案八:

哦哦。。。。。学习了。。。。

时间: 2025-01-19 19:43:07

数据-菜鸟求教!C#大文本处理如何提速?的相关文章

php上传excel导出pdf~菜鸟求教,大神指点

问题描述 php上传excel导出pdf~菜鸟求教,大神指点 烦了我三个星期的需求:在线excel转pdf. 需求是把excel上传后经过php转为pdf,我开是利用了phpexcel,上传后再用tcpdf生成,但是phpexcel无法,或者说找不到获取列宽和行高的函数.然后就直接用phpexcel调用tcpdf的类库输出,但是就生成乱码 - -. 目前使用的环境是PHP5.4+linux+tengine 现在有几个问题,想请教各路大神: 1.phpexcel如何获取列宽和行高 2.如何生成pd

极光推送这几个参数什么意思?菜鸟求教大神。

问题描述 极光推送这几个参数什么意思?菜鸟求教大神. static String appId = "b03c5cfef65ed30108f0a3fd82c3f6b4"; static String appkey = "110000"; static String master = "a02a76119b20d4e31620d7597a3b4f35"; static String CID = "873ffc4fec7bfd43d47056

unity3d 仿真-大三菜鸟求教unity3d程序

问题描述 大三菜鸟求教unity3d程序 我在做一个unity3d小游戏的互动,希望我的player在挥剑的时候面前的cube消失并且伴随特效和音效,想问用编程怎么实现! 解决方案 你去蛮牛网站看看吧,那个里面有unity3d资源. 如果有帮助,记得点采纳. 解决方案二: 可以去 宣雨松的博客 或者 泰课在线,上面有很多优秀的Unity教程

c语言-菜鸟求教:int Main(WORD *parameter1)的数据类型问题。

问题描述 菜鸟求教:int Main(WORD *parameter1)的数据类型问题. 问一下main函数的输入量是指向word类型变量的地址?main函数返回的值为int型? 解决方案 这个一般是用于传递参数,为什么用word不清楚,按理说应该是char[]或者char *才行,传别的,操作系统不支持,如果main是作为入口的话. 解决方案二: 入参是一个 WORD * 指针变量,你要说是指向 WORD 变量的地址也没错,返回值是 int 没错.

反爬虫-菜鸟求助,大神请进:python爬取某东评论数据遇到的问题

问题描述 菜鸟求助,大神请进:python爬取某东评论数据遇到的问题 python爬取京东评论数据,爬10页的评论没问题,后面的评论就不断重复,到底是什么原因? 解决方案 先看是不是服务器返回的内容 然后就是你请求的参数有问题 所有重复请求 解决方案二: 应该是url没去重吧 解决方案三: 最近看到一个csdn的博客专门讲如何写电商爬虫的,地址是:http://blog.csdn.net/youmumzcs/article/details/51373830,楼主可以参考

linux编程-大菜鸟求教linux,想用c写一个helloworld不知从哪里下手,零基础伤不起啊,求大神指点。

问题描述 大菜鸟求教linux,想用c写一个helloworld不知从哪里下手,零基础伤不起啊,求大神指点. 解决方案 用apt安装gcc,用vim或者任意的编辑器创建源代码,用gcc编译. 解决方案二: 红帽啊?没用红帽,只用ubuntu,不过应该都差不多吧,打开终端,然后进入相应的目录,通过vim新建文件进行编辑 解决方案三: 进入终端,用vi创建一个.c文件,在里边用c语言写个程序,运行即可

菜鸟求教一个问题,求大神啊!

问题描述 菜鸟求教一个问题,求大神啊! ActivityCompat.requestPermissions();为什么会显示没有定义这个方法?跟api版本有关吗,我的是api18的! 求教啊 解决方案 版本太低了. 解决方案二: 另外换一个版本再试试. 解决方案三: 另外换一个版本再试试. 解决方案四: 黑马程序员-一个菜鸟到大神

MySQL---数据库从入门走向大神系列(九)-用Java向数据库读写大文本/二进制文件数据

介绍MySQL的文本和图形数据类型: Text 类型: 数据类型:描述 ------------------------------------------------------ char(size):保存固定长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的长度.最多 255 个字符. varchar(size):保存可变长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的最大长度.最多 255 个字符. 注释:如果值的长度大于 255,则被转换为 text类型

菜鸟眼中的大数据与汽车金融

作为一个金融行业的菜鸟,对大数据的理解,印象最深的不是它的未来有多么美好,而是提起它,就不自觉的想起那段让人痛不欲生的"表+哥""表+姐"生活和不断因为excel导致死机重启的工作经历,那时候经常幻想有一个超级电脑,能迅速.真实的抓取所需要的各种数据,来拯救我们不断增长的体重与视力度数. 怀着对大数据的无比崇敬之心,结合目前汽车金融行业的发展态势,以一个菜鸟的身份,对行业大数据发展进行一个简单的科普和解读,并希望抛砖引玉,为即将到来的"互联网金融"