按行读取文本或字符串到数组效率测试:StreamReader与Split函数对比

1. 读取文本文件测试:测试文件“XX.csv”,3538行

耗时:4618ms

            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 1000; i++)
            {
                string a = File.ReadAllText("XX.csv", Encoding.Default);
                string[] arr = new string[3538];
                arr = a.Split(new char[] { ‘\r‘, ‘\n‘ });
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            Console.ReadLine();

耗时:2082ms

            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 1000; i++)
            {
                string[] arr = new string[3538];
                int j = 0;
                using (StreamReader sr = new StreamReader("XX.csv"))
                {
                    while (!sr.EndOfStream)
                    {
                        arr[j++] = sr.ReadLine();  // 额外作用,忽略最后一个回车换行符
                    }
                }
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            Console.ReadLine();

2. 读取字符串测试:

耗时:8369ms

            string a = "0123456789\r\0123456789\r\0123456789\r\0123456789\r\n0123456789\r\n" +
                "0123456789\r\0123456789\r\0123456789\r\0123456789\r\n0123456789\r\n";
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 10000000; i++)
            {
                string[] arr = new string[10];
                arr = a.Split(new char[] { ‘\r‘, ‘\n‘ });
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            Console.ReadLine();

耗时:5501ms

                int j = 0;
                using (StringReader sr = new StringReader(a))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        arr[j++] = line;
                    }
                }

 

结论:StreamReader耗时约为Split函数的1/2。

时间: 2024-11-08 21:28:41

按行读取文本或字符串到数组效率测试:StreamReader与Split函数对比的相关文章

C#按行读取文本并存放再数组内

我只想说真的是日了狗的麻烦,代码就那么几行,但是根本看不懂在搞些什么东西,我现在还是一点都不知道getline函数到底是怎么用的,但是事实就是他确实能用. 期间在那该死的第一个char根本不知道为什么要是char,为什么要用[].求指教. #include "stdafx.h" #include <opencv2\opencv.hpp> #include <io.h> #include <iostream> #include <string&g

关于逐行逐行读取文本内容并写入数组

有关逐行写入的在这里 下面是关于逐行读取 fn maxfilelog finpath = ( fin = openfile finpath seek fin #eof maxlen=filepos fin seek fin 0 res = readChars fin maxlen errorAtEOF:false filterString res "\n" ) -- 将文件内容逐行添加到数组 之前想用来记录和读取配置文件,后来发现了更简单的... getINISetting <f

字符串、数组方法实战--charAt(),split(),indexOf(),substring()

这篇随笔根据两个面试题来实战一下数组.字符串的一些方法. 题一:一个字符串中找出出现次数最多的字符次数 1 var str = 'fuuhuhuhufaihuhfnkjNKCNIO';? 2 function num(str) { 3 var json = {}; 4 for (var i = 0; i < str.length; i++){ 5 //字符串的charAt()方法返回指定位置的字符串 6 if(!json[str.charAt(i)]){//若json对象中没有当前属性,则给当前

js中字符串和数组相互转化的方法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "He

MSSQL—字符串分离(Split函数)

前面提到了记录合并,有了合并需求肯定也会有分离需求,说到字符串分离,大家肯定会想到SPLIT函数,这个在.NET,Java和JS中都有函数,很可惜在SQL SERVER中没有,我们只能自己来写这么一个函数. 首先来分析一下怎么写这个函数,以之前合并的字符串为例,“张三,李四,王五,钱六,赵七,Tom,Amy,Joe,Leo”,现在要将此字符串按照“,”进行分离得到一组数据,现在可以得出这个函数传入变量有两个,一个是目标字符串,我们定义为@string,数据类型为nvarchar(500),选择n

MSSQL&mdash;字符串分离(Split函数)

前面提到了记录合并,有了合并需求肯定也会有分离需求,说到字符串分离,大家肯定会想到SPLIT函数,这个在.NET,Java和JS中都有函数,很可惜在SQL SERVER中没有,我们只能自己来写这么一个函数. 首先来分析一下怎么写这个函数,以之前合并的字符串为例,"张三,李四,王五,钱六,赵七,Tom,Amy,Joe,Leo",现在要将此字符串按照","进行分离得到一组数据,现在可以得出这个函数传入变量有两个,一个是目标字符串,我们定义为@string,数据类型为nv

Matlab 读取dat文件(包含几行多余文本,数据带有数字和字符串,且以逗号分隔)

需要删除前几行多余文本,并去除逗号和最后一列标签项,保存数据 处理前: matlab代码: fid = fopen('E:\study\研究生\a\backup新\backup\数据库\ecoli1.dat','rt'); %FormatString='%f %f %f %f %f %f %f %s';%取前8列数据 FormatString='%f %f %f %f %f %f %f %*[^\n]';%取前七列数据,最后一列标签去掉 % 注意:%*[^\n] 就是从当前直接跳到行尾.%*是一

字符串,字典,数组写入本地文件和从本地文件读取

参考:http://blog.csdn.net/hakusan/article/details/39429393?utm_source=tuicool&utm_medium=referral 一.字符串,字典,数组存储到本地文件 字符串,数组,字典存储到本地文件过程一样,只是要存储的数据类型不同而已,这里以字符串存储到本地文件为例,如下:    NSString *content = @"将字符串存储到本地文件";    (1)获取Documents文件夹路径 参数:(1)指定

[Arduino] 在串口读取多个字符串,并且转换为数字数组

功能如题目.在串口收到逗号分割的6串数字比如100,200,45,4,87,99然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值代码注释很详细了,就不再说明了. //定义一个comdata字符串变量,赋初值为空值 String comdata = ""; //numdata是分拆之后的数字数组 int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0; void setup() { //定义