多个backgroundworkers使用不同的参数调用相同的函数

时间:2014-12-12 22:30:44

标签: c# function global-variables backgroundworker

我有两个后台工作者在无限循环中调用一个函数,但输入参数不同。该函数中使用了很多变量。

问题:定义函数内部使用的变量的最佳方法是什么?

如果我全局定义变量,性能很好。但是,我必须多次使用锁来确保修改变量时没有冲突。

如果我在函数内部定义变量,那么就不会发生冲突(显然),但代码会慢2-3倍。这是预期的,因为它就像在循环中定义变量而不是在循环外定义它们。

一种解决方案是制作该函数的另一个副本,并定义单独的全局变量,以用于该线程中调用的第二个线程和第二个函数。这在性能方面可能不错,但我认为这不是最优雅的方法。

任何意见/解决方案都表示赞赏。

2 个答案:

答案 0 :(得分:1)

创建一个包含所有变量的Properties的类。让每个BackgroundWorker创建自己的此类实例,并将其作为Argument传递给函数。

虽然我不太清楚如果在函数本身中定义这些变量,为什么你的性能会降低2-3倍。

答案 1 :(得分:0)

每个后台工作人员的参数是否有效“恒定”?如果是这样,你可以创建一个返回函数的函数 - 它类似于你提出的解决方案,但更优雅,因为你实际上并不需要复制函数。这是一个简单的例子:

public void RunBackgroundWorkerOne()
{
    var myFunction = CreateFunction("Hello ", "World");

    while (true)
        myFunction();
}

public Func<string> CreateFunction(string value1, string value2)
{
    return (value1, value2) =>
    {
        return String.Format(value1, value2);
    };
}

然后每个后台工作者都会获得自己的函数副本,该函数是围绕它想要使用的参数构建的。

根据您正在创建的函数的参数的复杂程度,您可能需要创建一个“参数映射”类的类,以使代码更清晰。