关于文件读写的问题
大家好,这是我第一次发帖子。希望大家帮助啊!我用streamreader读取文件结果,发现速度太慢了!请问如何提高速度?一下为程序代码:希望大侠们帮忙解决一下!
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Collections;
using System.Data.OleDb;
using System.Text.RegularExpressions;
public partial class _Default : System.Web.UI.Page
{
int point_id;
int point_index;
protected void Page_Load(object sender, EventArgs e)
{
}
public void Line_Load()
{
OleDbConnection conn;
conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("MODEL.mdb");
conn.Open();
OleDbCommand Cmd;
string sql;
int line_loadnum = 0;
string upFileName = FileUpload1.PostedFile.FileName;
if (Path.GetFileName(upFileName) == "")
return;
FileStream Filestr = new FileStream(upFileName, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
StreamReader Stread = new StreamReader(Filestr);
string line;
while ((line = Stread.ReadLine()) != "$ ANALYSIS OPTIONS")//$ ANALYSIS OPTIONS
{
try
{
if (!line.Equals(" ") && !line.Equals("$ LINE OBJECT LOADS") && line.Contains("LINELOAD"))
{
line_loadnum++;
string[] splits = Regex.Split(line, @"\s{1,}");
Line_Id(splits[2], splits[3], "$ ANALYSIS OPTIONS");
if (splits[9].Contains("DEAD"))
{
if (splits[5].Contains("UNIFF"))
{
sql = "Insert Into LINE_LOAD_INFORMATION(LINE_LOAD_ID,LINE_ID,START_VALUE,END_VALUE,START_POSITION,END_POSITION,LINE_LOAD_TYPE,X_DIRECTION,Y_DIRECTION,Z_DIRECTION)values(" + line_loadnum + ", " + point_index + "," + Convert.ToDouble(splits[11]) + "," + Convert.ToDouble(splits[11]) + ",0,1,0,0,0,-1)";
Cmd = new OleDbCommand(sql, conn);
Cmd.ExecuteNonQuery();
}
if (splits[5].Contains("TRAPF"))
{
sql = "Insert Into LINE_LOAD_INFORMATION(LINE_LOAD_ID,LINE_ID,START_VALUE,END_VALUE,START_POSITION,END_POSITION,LINE_LOAD_TYPE,X_DIRECTION,Y_DIRECTION,Z_DIRECTION)values(" + line_loadnum + ", " + point_index + "," + Convert.ToDouble(splits[11]) + "," + Convert.ToDouble(splits[13]) + "," + Convert.ToDouble(splits[15]) + "," + Convert.ToDouble(splits[17]) + ",0,0,0,-1)";
Cmd = new OleDbCommand(sql, conn);
Cmd.ExecuteNonQuery();
}
}
if (splits[9].Contains("LIVE"))
{
if (splits[5].Contains("UNIFF"))
{
sql = "Insert Into LINE_LOAD_INFORMATION(LINE_LOAD_ID,LINE_ID,START_VALUE,END_VALUE,START_POSITION,END_POSITION,LINE_LOAD_TYPE,X_DIRECTION,Y_DIRECTION,Z_DIRECTION)values(" + line_loadnum + "," + point_index + "," + Convert.ToDouble(splits[11]) + "," + Convert.ToDouble(splits[11]) + ",0,1,1,0,0,-1)";
Cmd = new OleDbCommand(sql, conn);
Cmd.ExecuteNonQuery();
}
if (splits[5].Contains("TRAPF"))
{
sql = "Insert Into LINE_LOAD_INFORMATION(LINE_LOAD_ID,LINE_ID,START_VALUE,END_VALUE,START_POSITION,END_POSITION,LINE_LOAD_TYPE,X_DIRECTION,Y_DIRECTION,Z_DIRECTION)values(" + line_loadnum + "," + point_index + "," + Convert.ToDouble(splits[11]) + "," + Convert.ToDouble(splits[13]) + "," + Convert.ToDouble(splits[15]) + "," + Convert.ToDouble(splits[17]) + ",1,0,0,-1)";
Cmd = new OleDbCommand(sql, conn);
Cmd.ExecuteNonQuery();
}
}
}
}
catch(Exception ee)
{
Response.Write(ee.Message);
}
}
conn.Close();
}
public long Line_Id(string key1, string key2,string key3)
{
point_id = 0;
string upFileName = FileUpload1.PostedFile.FileName;
if (Path.GetFileName(upFileName) == "")
return 0;
FileStream Filestr0 = new FileStream(upFileName, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
StreamReader Stread0 = new StreamReader(Filestr0);
string line0;
while ((line0 = Stread0.ReadLine()) != key3)
{
if (!line0.Equals(" ") && line0.Contains("LINEASSIGN") && !line0.Equals("$ LINE ASSIGNS"))
{
point_id++;
string[] spilts7 = Regex.Split(line0, @"\s{1,}");
if (spilts7[2].Equals(key1) && spilts7[3].Equals(key2))
{
point_index = point_id;
break;
}
}
}
return point_index;
Stread0.Close();
Filestr0.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
Line_Load();
}
}
--------------------编程问答-------------------- 这可能不是文件读取的快慢吧,可能是你处理读取后的数据慢吧。。。 --------------------编程问答-------------------- 你是说读入数据库比较的慢的吗?
我觉得是不是用了两次的streamreader去读取同一个文件,导致速度比较的慢?
我测试了,读取3000条记录需要13分钟的时间,这太长了。 --------------------编程问答-------------------- 不过好像我读取的文件是比较的大的,10M左右的文本文件,而且我需要读取的字段是比较的混乱的
补充:.NET技术 , C#