c# - C#: Call a method every 5 minutes from a foreach loop

标签 c# .net multithreading timer

我的控制台应用程序正在从文本文件中读取大量数据,这些数据将被保存到数据库中。为此,我将数据存储到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/

相关文章:

c# - 移动应用程序时重置用户设置

c# - 我的类库应该以哪个 .NET Framework 和 C# 版本为目标?

java - java多线程中实例上获取的锁

C# #import 从缺失的类型库中引用了一个类型; '__missing_type__' 用作占位符

c# - SqlCommand.Parameters.AddWithValue 未返回正确结果

c# - 返回 NULL 值的 JSON 反序列化器

c# - Microsoft HTML 帮助 - 从主题 ID 获取主题页面 URL

.net - 如何使用主干单页应用程序在 MVC4 中测试 AntiForgeryToken

c - 线程和具有依赖关系的嵌套 for 循环(C 中的 pthreads)

C# .Net 4.0 控制台应用程序 - 如何在所有线程完成之前保持事件状态?