代码性能(批量复制/读取多行并从文本文件保存到数据库中)

Code performance (bulk copy/ reading multiple lines and saving in database from text file)

我最近在学习c#编​​程,需要一些帮助来确定代码的性能。 我必须读取一个文件和其中的一些细节。
文件有 4 列:

ID, dob, size, accountno. 

问题:我必须读取每一行并将它们插入数据库并且每天有超过50000个条目。

我试过的解决方法: 创建了一个具有 4 个属性 (ID, dob, size, accountno.) 的 class,然后遍历文件并将所有数据转换为对象并继续将它们添加到 ArraList。所以,基本上现在我得到了一个包含 50000 个对象的数组列表。 现在,我最后遍历数组并将详细信息插入数据库。

这是正确的做法吗?

请专家帮忙

代码:

namespace testing
{
class Program
{
    static void Main(string[] args)
    {
        string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
        string InputDirectory = @"My Documents\2015";

        string FileMask = "comb*.txt";

        ArrayList al = new ArrayList();

        string line;
        var Files = Directory.GetFiles(InputDirectory, FileMask, SearchOption.AllDirectories).Select(f => Path.GetFullPath(f));
        foreach (var f in Files)
        {
            using (StreamReader reader = new StreamReader(f))
            {
                string date;

                while ((line = reader.ReadLine()) != null)
                {
                    Datamodel dm = new Datamodel();

                    string[] values = line.Split(',').Select(sValue => sValue.Trim()).ToArray();
                    dm.ID = values[0].ToString();
                    dm.dob= dm.RPT_ID.Remove(0, 4);
                    dm.size= values[1].ToString();
                    dm.accountno= values[2].ToString();

                    al.Add(dm);
                }

                reader.Close();
            }
        }
        utilityClass.Insert_Entry(al);
    }
}
}

我的解决方案:感谢以上所有评论。

namespace Test
{
class Program
{
    static void Main(string[] args)
    {
        string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
        string InputDirectory = @"My Documents\2015";

        string FileMask = "comb*.txt";

        try
        {
            string line = null;
            var Files = Directory.GetFiles(InputDirectory, FileMask, SearchOption.AllDirectories).Select(f => Path.GetFullPath(f));
            foreach (var f in Files)
            {
                DataTable table = new DataTable();
                table.TableName = f;
                table.Columns.Add("ID", typeof(Int64));
                table.Columns.Add("dob", typeof(string));
                table.Columns.Add("size", typeof(string));
                table.Columns.Add("accountno", typeof(string));

                using (StreamReader reader = new StreamReader(f))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                            string[] values = line.Split(',').Select(sValue => sValue.Trim()).ToArray();
                            string uniqueGuid = SequentialGuidGenerator.NewGuid().ToString();
                            uniqueGuid = uniqueGuid.Replace("-", "");
                            int ID = convert.toint(values[0]);

                            string NOTIF_ID = "";
                            table.Rows.Add(ID,values[1].ToString(),values[2]).toString(),values[2]).toString());

                    }

                    reader.Close();
                }
                utilityClass.Insert_Entry(table, env);
            }
        }
        catch (Exception e)
        {
            CustomException.Write(CustomException.CreateExceptionString(e));
        }
    }
}
}

Insert_Entry

using (SqlConnection con = new      SqlConnection(utilityClass.GetConnectionString(environ)))
             {
            con.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con))
            {
                bulkCopy.DestinationTableName = "dbo.inserttablename";
                try
                {
                    bulkCopy.WriteToServer(mfsentdata);
                }
                catch (SqlException e)
                {
                    CustomException.Write(CustomException.CreateExceptionString(e, mfsentdata.TableName));
                }
            }
            con.Close();
        }
    }

要进一步 SQL 性能,请查看交易:

connection.BeginTransaction();
//bulk insert commands here
connection.Commit();