C# 显示DataAdapter.Update()的进度会使其运行速度加倍。有什么建议吗?
我使用DataAdapter.Update()命令从数据集中获取任何更改,并将它们推送到本地sql数据库中 为了显示进度,我使用“DataAdapter.RowUpdated+=DataAdapter\u RowUpdated;” 因此,每更新一行,DataAdapter_RowUpdated函数都会启动。虽然它更新数据库的速度是原来的两倍(更新50000条记录需要2:22分钟,没有它,需要1:04分钟) 有没有办法不让事情慢下来C# 显示DataAdapter.Update()的进度会使其运行速度加倍。有什么建议吗?,c#,sql,database,multithreading,backgroundworker,C#,Sql,Database,Multithreading,Backgroundworker,我使用DataAdapter.Update()命令从数据集中获取任何更改,并将它们推送到本地sql数据库中 为了显示进度,我使用“DataAdapter.RowUpdated+=DataAdapter\u RowUpdated;” 因此,每更新一行,DataAdapter_RowUpdated函数都会启动。虽然它更新数据库的速度是原来的两倍(更新50000条记录需要2:22分钟,没有它,需要1:04分钟) 有没有办法不让事情慢下来 public MainWindow() { objDat
public MainWindow()
{
objDataAdapter.RowUpdated += ObjDataAdapter_RowUpdated;
}
//Updating database from DataSet
private void BgWorkerWriteDB_DoWork(Object sender, DoWorkEventArgs e)
{
//This divides 100 by the number of rows to update so It adds that number every iteration.
var chData = objDataSet.Tables[0].GetChanges();
if (chData != null)
{
percentagePass = 100 / (decimal)chData.Rows.Count;
}
SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(objDataAdapter);
objDataAdapter.SelectCommand = new SqlCommand("SELECT * FROM ActiveInactive", objCon);
objDataAdapter.Update(objDataSet);
}
//Firing every updated row
private void ObjDataAdapter_RowUpdated(object sender, SqlRowUpdatedEventArgs e)
{
decimal temp = progress;
progress += (decimal)percentagePass;
if (progress > temp)
{
lblProgressDB.Dispatcher.Invoke(() => lblProgress.DB.Content = ((int)progress + "%").ToString());
}
}
找到了解决方案,if语句需要对整数而不是小数进行取整和检查。
更新的事件处理程序中有什么?每次调用运行需要多长时间?每次更新数据库中的一行时,\u RowUpdated被提升。它在中间被提升,所以对于50000条记录,它执行50000次。这不是我所要求的。我知道
RowUpdated
事件是如何工作的,我想问您的ObjDataAdapter\u RowUpdated
事件处理程序中实际有什么内容,运行需要多长时间?您已经用注释将其隐藏在代码列表中。除非您已经知道每次调用它需要多长时间,否则这里的内容可能是您问题的答案。我刚刚添加了处理程序中正在发生的事情。我猜您的进度条更新太多了。很难说清楚,因为数据类型和值在您向我们展示的内容中并不明显,但有可能(progress>temp)
测试总是通过,因此您要更新进度条50000次。
if ((int).progress > (int).temp)