我的控制台应用程序正在从文本文件中读取大量数据,这些数据将被保存到数据库中。为此,我将数据存储到DataTable中,并且希望每5分钟将此数据表转储到DB中(如果我想一次转储整个数据,则必须用整个数据集填充DataTable,在这种情况下,我会收到OutOfMemoryException)。
public void ProcessData()
{
string[] files=File.ReadAllLines(path)
foreach(var item in files)
{
DataRow dtRow= dataTable.NewRow();
dtRow["ID"]= .... //some code here;
dtRow["Name"]= .... //some code here;
dtRow["Age"]= .... //some code here;
var timer = new Timer(v => SaveData(), null, 0, 5*60*1000);
}
}
public void SaveData(string tableName, DataTable dataTable )
{
//Some code Here
//After dumping data to DB, clear DataTable
dataTable.Rows.Clear();
}
我在这里想要的是,代码将继续填充DataTable,并且每隔5分钟它将调用SaveData()方法。这将继续运行,直到处理完所有文件。
但是,我已经看到,当调用SaveData()方法时,它将执行4-5次。有时,它每5分钟调用一次漫游器。
我没有在这里继续进行。如何解决这个问题?可以在这里使用其他方法吗?任何帮助表示赞赏。
最佳答案
这将是关于如何实现代码的建议以及其他答案的建议:
public void ProcessData()
{
int i = 1;
foreach(var item in File.ReadLines(path)) //This line has been edited
{
DataRow dtRow= dataTable.NewRow();
dtRow["ID"]= .... //some code here;
dtRow["Name"]= .... //some code here;
dtRow["Age"]= .... //some code here;
if (i%25 == 0) //you can change the 25 here to something else
{
SaveData(/* table name */, /* dataTable */);
}
i++;
}
SaveData(/* table name */, /* dataTable */);
}
public void SaveData(string tableName, DataTable dataTable )
{
//Some code Here
//After dumping data to DB, clear DataTable
dataTable.Rows.Clear();
}
关于c# - C#: Call a method every 5 minutes from a foreach loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15461724/