我在C#中使用BackgroundWorker性能出现了一个奇怪的问题。我有一个应用程序,其中使用BackgroundWorker来执行某些任务。 Basicaly任务如下:C#中BackgroundWorker的性能问题
public void simulate(Image imgSimulator)
{
simulador = new Simulator(imgSimulator);
simulador.setBackground(0);
Constants.finishSimulation = false;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += run;
bw.RunWorkerAsync(imgSimulator);
}
public void run(object sender, DoWorkEventArgs e)
{
Image imgSimulator = (Image)e.Argument;
bool clear;
foreach (Program p in programs)
{
Resource r = p.getResource(0);
clear = true;
if (r is Text)
{
Text t = (Text)r;
clear = t.getClearPrev() == 1;
}
if (!clear)
{
simulador.setBackground(FontBitmap.COLOR_BLACK);
}
p.execute(simulador, imgSimulator);
if (Constants.finishSimulation)
{
break;
}
}
}
在上面的代码的主要职能是执行:
public void execute(Simulator simulador, System.Windows.Controls.Image imgSimulator)
{
long now = DateTime.Now.Ticks/10000;
long current = DateTime.Now.Ticks/10000;
while (true)
{
current = DateTime.Now.Ticks/10000;
if (current - now >= 1)
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
((MainWindow)System.Windows.Application.Current.MainWindow).Title = "" + Constants.index++;
}));
now = DateTime.Now.Ticks/10000;
}
}
}
我已经修改了执行功能调试的目的,现在它改变主窗口的标题。
的问题是,在我的电脑应用程序运行正常,但我想它在另一台PC和标题不会以相同的速率更新。
这里有一些数据(我已经改变了做这个测试的唯一的事情就是数10000)
如果我改变10000〜1000000在我的电脑应用程序需要30秒钟达到300(在窗口标题栏),同样的情况发生在另一台电脑上。 如果我改变10000到100000在我的电脑应用程序需要30秒到达3000(在窗口标题栏),但在另一台电脑需要47秒到达3000
我注意到的其他事情是,如果我打开另一个C#应用程序(WPF),并将鼠标移到其控件上(或将焦点放在文本框上),该应用程序正确运行(以与它运行速度相同的速度运行)。
我的电脑和其他电脑的唯一区别是我安装了Visual Studio 2013。
可能是什么问题?
谢谢。
如果调用['RenderCapability.Tier'](https://msdn.microsoft.com/en-us/library/system.windows.media.rendercapability.tier(V = VS.100)的.aspx)上两个系统,你有相同的价值吗?此外,DateTime的准确性可能因系统而异。如果您将代码切换到使用“Stopwatch”,它是否会更加一致(如果两个层次与第一个问题相同)? –
我假设你的意思是你的意思是“10000”的示例代码中的“100000”? – RandomEngy
是的,我想说的10000 – RdlP