我有两个后台工作人员,它们在无限时间循环中调用一个函数,但是具有不同的输入参数。在这个函数中使用了很多变量。
问题:定义函数内部使用的变量的最佳方法是什么?
如果我在全球范围内定义变量,那么它的性能就很好。但是,我必须多次使用lock,以确保在修改变量时没有冲突。
如果我在函数中本地定义变量,就不会有冲突(很明显),但是代码的速度会慢2-3倍。这和预期的一样,因为它就像在循环中定义变量,而不是在循环之外定义变量。
一种解决方案是复制该函数,并为该线程中调用的第二个线程和第二个函数定义单独的全局变量。这在性能上可能很好,但我认为这不是最优雅的方法。
如有任何意见/解决办法,我们将不胜感激。
发布于 2014-12-12 23:49:18
创建一个包含所有变量属性的类。让每个BackgroundWorker创建自己的该类实例,并将其作为参数传递给函数。
虽然我不太清楚,如果在函数本身中定义了这些变量,为什么性能会降低2-3次。
发布于 2014-12-12 23:53:12
每个背景工作者的参数是否有效地“恒定”?如果是这样的话,您可以创建一个返回函数的函数--它类似于您想出的解决方案,但更优雅,因为您实际上不需要复制该函数。下面是一个简单的例子:
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);
};
}然后,每个后台工作人员都会获得围绕它想要使用的参数构建的函数的副本。
根据要创建的函数的参数有多复杂,您可能希望创建一个“参数映射”类型的类,以使代码更加清晰。
https://stackoverflow.com/questions/27453131
复制相似问题