gpt4 book ai didi

c# - 插入到 SQL 性能问题

转载 作者:行者123 更新时间:2023-12-03 21:50:44 24 4
gpt4 key购买 nike

我前段时间写了一个程序,可以在相当大的文本文件中进行定界和读取。该程序可以运行,但问题是它基本上会卡住计算机并且需要很长时间才能完成。平均每个文本文件有大约 10K 到 15K 行,每行代表 SQL 表中的一个新行。

我的程序的工作方式是首先读取所有行(这是分隔发生的地方)并将它们存储在数组中,然后遍历每个数组元素并将它们插入到 SQL 表中。这一切都是一次性完成的,我怀疑占用了太多内存,导致程序卡住计算机。

这是我读取文件的代码:

private void readFile()
{
//String that will hold each line read from the file
String line;

//Instantiate new stream reader
System.IO.StreamReader file = new System.IO.StreamReader(txtFilePath.Text);

try
{
while (!file.EndOfStream)
{
line = file.ReadLine();

if (!string.IsNullOrWhiteSpace(line))
{
if (this.meetsCondition(line))
{
badLines++;
continue;
} // end if

else
{
collection.readIn(line);
counter++;
} // end else
} // end if

} // end while

file.Close();

} // end try

catch (Exception exceptionError)
{
//Placeholder
}

插入代码:

for (int i = 0; i < counter; i++)
{
//Iterates through the collection array starting at first index and going through until the end
//and inserting each element into our SQL Table
//if (!idS.Contains(collection.getIdItems(i)))
//{
da.InsertCommand.Parameters["@Id"].Value = collection.getIdItems(i);
da.InsertCommand.Parameters["@Date"].Value = collection.getDateItems(i);
da.InsertCommand.Parameters["@Time"].Value = collection.getTimeItems(i);
da.InsertCommand.Parameters["@Question"].Value = collection.getQuestionItems(i);
da.InsertCommand.Parameters["@Details"].Value = collection.getDetailsItems(i);
da.InsertCommand.Parameters["@Answer"].Value = collection.getAnswerItems(i);
da.InsertCommand.Parameters["@Notes"].Value = collection.getNotesItems(i);
da.InsertCommand.Parameters["@EnteredBy"].Value = collection.getEnteredByItems(i);
da.InsertCommand.Parameters["@WhereReceived"].Value = collection.getWhereItems(i);
da.InsertCommand.Parameters["@QuestionType"].Value = collection.getQuestionTypeItems(i);
da.InsertCommand.Parameters["@AnswerMethod"].Value = collection.getAnswerMethodItems(i);
da.InsertCommand.Parameters["@TransactionDuration"].Value = collection.getTransactionItems(i);
da.InsertCommand.ExecuteNonQuery();
//}

//Updates the progress bar using the i in addition to 1
_worker.ReportProgress(i + 1);

} // end for

最佳答案

如果您可以将您的集合映射到 DataTable,那么您可以使用 SqlBulkCopy导入您的数据。 SqlBulkCopy 是将数据从 .Net 导入到 SqlServer 的最快方法。

关于c# - 插入到 SQL 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com