如何加快读取文本文件(或者csv文件)的速度,谢谢啦
老板嫌速度慢,叫我加快读取速度,请各位帮帮忙吧
代码如下,读的是csv文件
Dim sr As System.IO.TextReader
Dim array_line() As String
Dim i As Integer
Dim j As Integer
Dim strLine As String
Try
PsGetData = True
sr = New StreamReader(strPath, System.Text.Encoding.Default)
sr.ReadLine()
'计算行数
i = 1
Do
If sr.Peek() = -1 Then
Exit Do
End If
strLine = sr.ReadLine()
i = i + 1
Loop
sr.Close()
'定义数组
ReDim array(i, int項目数)
'取得数据
sr = New StreamReader(strPath, System.Text.Encoding.Default)
i = 1
Do
array_line = Split(sr.ReadLine(), ", ")
For j = 0 To UBound(array_line)
array(i, j + 1) = array_line(j)
Next
If sr.Peek = -1 Then
Exit Do
End If
i = i + 1
Loop
Catch ex As DirectoryNotFoundException
Call cf_MsgScreen(Me, C_ERROR, C_DIRECTORYNOTFOUND)
PsGetData = False
Exit Function
Catch ex As FileNotFoundException
Call cf_MsgScreen(Me, C_ERROR, C_FILENOTFOUND)
PsGetData = False
Exit Function
Catch ex As Exception
Call cf_MsgScreen(Me, C_ERROR, ex.Message)
PsGetData = False
Exit Function
End Try
sr.Close()
PsGetData = True
End Function
代码中,先计算了行数,用来定义数组,然后将数据读进数组,是不适因为使用StreamReader,所以慢呢。
[解决办法]
使用 StringBuilder/ ArrayList 不用定义数组,但行数非常多的话,也困难。
那就不计算行数,直接读取、分析、运用——已经不用定义什么数组。
[解决办法]
先定义一个很大的数组。
比如:Dim array_line(1000000) As String
只是定义的话,就不占内存。而且字符串不赋值也不占内存
[解决办法]
//如何让2维数组的一行直接等于一个一维数组?
好像可以直接赋值的
[解决办法]
给你一段现成代码,是读到DataSet里的
public DataSet GetDataSetFromCSV(string filePath, string fileName)
{
string strConn = @ "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq= ";
strConn += filePath; //filePath, For example: C:\
strConn += ";Extensions=asc,csv,tab,txt; ";
OdbcConnection objConn = new OdbcConnection(strConn);
DataSet dsCSV = new DataSet();
try
{
string strSql = "select * from " + fileName; //fileName, For example: 1.csv
OdbcDataAdapter odbcCSVDataAdapter = new OdbcDataAdapter(strSql, objConn);
odbcCSVDataAdapter.Fill(dsCSV);
return dsCSV;
}
catch (Exception ex)
{
throw ex;
}
}