我要做个小项目。
读取csv文件 我测试的文件1000行 代码加载很快。
但是加载一个3M大小的 3W行 代码 就卡住了。。
有谁能解决啊。。
我读取只从网上找的一个读写类。。
 #region 类说明信息
    /// <summary>
    ///  <DL>
    ///  <DT><b>读CSV文件类,读取指定的CSV文件,可以导出DataTable</b></DT>
    ///   <DD>
    ///    <UL> 
    ///    </UL>
    ///   </DD>
    ///  </DL>
    ///  <Author>yangzhihong</Author>    
    ///  <CreateDate>2006/01/16</CreateDate>
    ///  <Company></Company>
    ///  <Version>1.0</Version>
    /// </summary>
    #endregion
    public class CsvStreamReader
    {
        private ArrayList rowAL;        //行链表,CSV文件的每一行就是一个链
        private string fileName;        //文件名
        private Encoding encoding;      //编码        public CsvStreamReader()
        {
            this.rowAL = new ArrayList();
            this.fileName = "";
            this.encoding = Encoding.Default;
        }        /// <summary>
        /// 
        /// </summary>
        /// <param name="fileName">文件名,包括文件路径</param>
        public CsvStreamReader(string fileName)
        {
            this.rowAL = new ArrayList();
            this.fileName = fileName;
            this.encoding = Encoding.Default;
            LoadCsvFile();
        }        /// <summary>
        /// 
        /// </summary>
        /// <param name="fileName">文件名,包括文件路径</param>
        /// <param name="encoding">文件编码</param>
        public CsvStreamReader(string fileName, Encoding encoding)
        {
            this.rowAL = new ArrayList();
            this.fileName = fileName;
            this.encoding = encoding;
            LoadCsvFile();
        }        /// <summary>
        /// 文件名,包括文件路径
        /// </summary>
        public string FileName
        {
            get
            {
                return fileName;
            }
            set
            {
                this.fileName = value;
                LoadCsvFile();
            }
        }        /// <summary>
        /// 文件编码
        /// </summary>        public Encoding FileEncoding
        {
            set
            {
                this.encoding = value;
            }
        }        /// <summary>
        /// 根据最小行,最大行,最小列,最大列,来生成一个DataTable类型的数据        /// 行等于1代表第一行        /// 列等于1代表第一列        /// maxrow: -1代表最大行
        /// maxcol: -1代表最大列
        /// </summary>
        public DataTable this[int minRow, int maxRow, int minCol, int maxCol]
        {
            get
            {
                //数据有效性验证                CheckRowValid(minRow);
                CheckMaxRowValid(maxRow);
                CheckColValid(minCol);
                CheckMaxColValid(maxCol);
                if (maxRow == -1)
                {
                    maxRow = RowCount;
                }
                if (maxCol == -1)
                {
                    maxCol = ColCount;
                }
                if (maxRow < minRow)
                {
                    throw new Exception("最大行数不能小于最小行数");
                }
                if (maxCol < minCol)
                {
                    throw new Exception("最大列数不能小于最小列数");
                }
                DataTable csvDT = new DataTable();
                int i;
                int col;
                int row;                //增加列                for (i = minCol; i <= maxCol; i++)
                {
                    csvDT.Columns.Add(i.ToString());
                }
                for (row = minRow; row <= maxRow; row++)
                {
                    DataRow csvDR = csvDT.NewRow();                    i = 0;
                    for (col = minCol; col <= maxCol; col++)
                    {
                        csvDR[i] = this[row, col];
                        i++;
                    }
                    csvDT.Rows.Add(csvDR);
                }                return csvDT;
            }
        }        /// <summary>
        /// 载入CSV文件
        /// </summary>
        private void LoadCsvFile()
        {
            //对数据的有效性进行验证            if (this.fileName == null)
            {
                throw new Exception("请指定要载入的CSV文件名");
            }
            else if (!File.Exists(this.fileName))
            {
                throw new Exception("指定的CSV文件不存在");
            }
            else
            {
            }
            if (this.encoding == null)
            {
                this.encoding = Encoding.Default;
            }            StreamReader sr = new StreamReader(this.fileName, this.encoding);
            string csvDataLine;            csvDataLine = "";
            while (true)
            {
                string fileDataLine;                fileDataLine = sr.ReadLine();
                if (fileDataLine == null)
                {
                    break;
                }
                if (csvDataLine == "")
                {
                    csvDataLine = fileDataLine;//GetDeleteQuotaDataLine(fileDataLine);
                }
                else
                {
                    csvDataLine += "\r\n" + fileDataLine;//GetDeleteQuotaDataLine(fileDataLine);
                }
                //如果包含偶数个引号,说明该行数据中出现回车符或包含逗号
                if (!IfOddQuota(csvDataLine))
                {
                    AddNewDataLine(csvDataLine);
                    csvDataLine = "";
                }
            }
            sr.Close();
            //数据行出现奇数个引号
            if (csvDataLine.Length > 0)
            {
                throw new Exception("CSV文件的格式有错误");
            }
        }     }代码太多 我删了一部分。

解决方案 »

  1.   

    http://www.codeproject.com/KB/database/CsvReader.aspx
    快速读取
      

  2.   

    自己 up 我用3L给的那个 老提示上面那句话 怎么回事啊 纠结了。。
      

  3.   


    那如果用我自己找的那个代码 我应该怎么改下呢。
    3L给的那个 unbelievable啊。 老报错。我就郁闷了。
      

  4.   

    高手 来帮忙下啊。。using System.IO;
    using LumenWorks.Framework.IO.Csv;void ReadCsv()
    {
        // open the file "data.csv" which is a CSV file with headers
        using (CachedCsvReader csv = new
               CachedCsvReader(new StreamReader("data.csv"), true))
        {
            // Field headers will automatically be used as column names
            myDataGrid.DataSource = csv;
        }
    }
    这个csv 要怎么用啊。。纠结哦
      

  5.   

    真纠结 自己在这里找了个 还算可以蛮快的 很好用
    http://www.csvreader.com