当前位置:编程学习 > C#/ASP.NET >>

关于文件读写的问题

大家好,这是我第一次发帖子。希望大家帮助啊!
我用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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,