在多个线程上调用相同的函数可提高性能

时间:2013-11-14 07:00:58

标签: c# multithreading multiple-columns

在我的应用程序中,我有一些结构如下

if(iterationCount==-3)
{

  CreatFullNetwork(obj1)
}

if(iterationCount==-2)
{
  CreatFullNetwork(obj2)//Method is same as previous
}

if(iterationCount==-1)
{
//Obj1,2,3 are same object but the sorting order variables inside object are different
  CreatFullNetwork(obj3)//Method is same as previous
}

为了提高性能,我计划创建3个线程并将其并行运行。这是一个好方法,它会起作用。 注意:CreatFullNetwork()是非常庞大的方法,它有子方法并创建大量集合并更新它们

1 个答案:

答案 0 :(得分:3)

在注释中,您声明函数调用不受CPU限制。它没有达到接近100%的CPU利用率。在这种情况下,您的程序的性能似乎不太可能通过多线程提高。

最重要的是,您的代码似乎使用了许多未同步的共享变量。在您考虑并行运行代码之前,您需要处理该问题。通常有两种方法可以做到这一点:

  1. 序列化对共享变量的访问以避免数据争用。
  2. 为每个线程安排所需信息和变量的私有副本。
  3. 一般来说,选项2更好,因为序列化由于使用锁而具有性能开销。但是,选项2可能很难实现,并且在您需要复制大量数据时可能会出现自身的性能问题。

    如果您的代码不受CPU限制,那么大多数情况都没有实际意义。也就是说,也许瓶颈在于另一台机器。也许瓶颈在于数据库访问。如果数据库可以有效地处理并行访问,那么线程可能会有所帮助。

    最重要的是,您需要更清楚地了解代码的作用以及限制性能的因素,然后才能考虑加快速度的选项。线程不是万能的灵丹妙药。它无助于加快所有程序的速度,您始终需要知道如何最好地部署它。