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

Posted X2009

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按行读取文本或字符串到数组效率测试: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。

以上是关于按行读取文本或字符串到数组效率测试:StreamReader与Split函数对比的主要内容,如果未能解决你的问题,请参考以下文章

c语言中从文件中按行读取字符串,并进行相应操作。

java 按行读取txt文件的数字

按行读取txt文本

java 按行读取txt文件并存入数组

如何拆分具有字符串和双精度的输入文本文件?

C# 读取TXT文件内容到listview