C# 用不同的参数调用相同的方法-如何使用多线程?

C# 用不同的参数调用相同的方法-如何使用多线程?,c#,.net,multithreading,C#,.net,Multithreading,以下是场景: 我有一个dll,它有一个方法,根据传递的参数从db获取数据,进行各种检查,并提供所需的数据 GetGOS_ForBill(AgencyCode) 在windows应用程序中,我有一个列表框,其中列出了500多家机构。 我检索每个机构的GOS,并将其附加到通用列表中。 如果用户选择了所有代理(目前为500多个),则从dll返回数据大约需要10分钟 我们考虑过后台处理。但这并没有减少用户在屏幕上做其他事情的时间。考虑多线程 有人能帮我吗?什么是正确的方法?我们如何使用多线程?顺便问一

以下是场景: 我有一个dll,它有一个方法,根据传递的参数从db获取数据,进行各种检查,并提供所需的数据

GetGOS_ForBill(AgencyCode)
在windows应用程序中,我有一个列表框,其中列出了500多家机构。 我检索每个机构的GOS,并将其附加到通用列表中。 如果用户选择了所有代理(目前为500多个),则从dll返回数据大约需要10分钟

我们考虑过后台处理。但这并没有减少用户在屏幕上做其他事情的时间。考虑多线程


有人能帮我吗?什么是正确的方法?我们如何使用多线程?

顺便问一下,我认为您在多线程方面没有太多经验,多线程不是一个可以通过Stackoverflow问题即兴创作和抛弃的主题。如果你不知道自己在做什么,我强烈建议你不要使用多线程。。。你将有两个问题,而不是一个问题

在您的情况下,性能问题与使用线程来获得并行工作负载无关,而是与正确地构造问题有关

现在,您分别查询每个机构,这些机构在几个机构中运行良好,但很快就会降级。查询本身可能很快,问题是您正在运行该查询500次。相反,为什么不尝试在一个查询中获取所有机构的所有GO(可能会很快),并将其存储在内存中(比如字典)。然后在需要时检索适当的GOS集


如果最常见的情况是用户只需选择其中的两个,则始终可以建立阈值。。。如果选择的数字小于,比如说,30,则执行每个查询,否则运行常规查询并从内存中检索。

顺便问一下,我认为您在多线程方面没有太多经验,多线程不是一个可以通过Stackoverflow问题即兴创作和抛弃的主题。如果你不知道自己在做什么,我强烈建议你不要使用多线程。。。你将有两个问题,而不是一个问题

在您的情况下,性能问题与使用线程来获得并行工作负载无关,而是与正确地构造问题有关

现在,您分别查询每个机构,这些机构在几个机构中运行良好,但很快就会降级。查询本身可能很快,问题是您正在运行该查询500次。相反,为什么不尝试在一个查询中获取所有机构的所有GO(可能会很快),并将其存储在内存中(比如字典)。然后在需要时检索适当的GOS集


如果最常见的情况是用户只需选择其中的两个,则始终可以建立阈值。。。如果所选数字小于,例如,30,则执行每个查询,否则运行常规查询并从内存中检索。

使用
Parallel
类。这一切取决于dll方法的实现方式,如果它支持多线程或不支持多线程。您有并行类的示例吗?另外,在编写dll方法时,没有考虑线程。如果我们必须使用多线程调用一个方法,我们需要特别做什么?使用
并行
类。这取决于dll方法是如何实现的,如果它支持多线程还是不支持多线程。你有并行类的例子吗?另外,在编写dll方法时,没有考虑线程。如果我们必须使用多线程调用一个方法,有什么需要特别做的吗?您对我的要求的理解也是正确的。顺便说一句,我不明白你提出的解决办法会有什么帮助。即使你必须把它放在memmory里,也需要10分钟。如果我选对了所有的代理。我愿意接受多线程以外的其他建议。如果是对数据库的查询,那么单个查询检索所有数据的速度要比500个查询检索数据子集的速度快得多。现在您可能正在执行类似于从GOF选择*的操作,其中AgencyCode=xxx大约500次。。。我建议将其更改为SELECT*from GOF,然后读取所有记录并根据AGECYU代码将其存储在内存中。该方法不仅仅是一个简单的选择。该方法背后有一个复杂的业务逻辑。它根据某些其他业务需求从多个表中获取数据,并返回一个通用列表。即使有了这个复杂的过程,它也能够在几秒钟内返回单个机构的数据。因此,毫无疑问,这种方法速度更快。但是,当我们必须处理所有代理时,这需要时间。使用多线程也不会有帮助。您的客户端可以启动5个或6个并发请求,但数据库服务器将以自己的方式处理这些请求,性能的提高不会是线性的(即,您不会获得快6倍的结果,但可能快1.5倍的结果)。。。该方法更快的事实并不改变您调用它500次的事实。如果你能写一个同样的方法,但是对于所有的机构来说,你可能会看到这种方法的性能比原来的慢2到3倍。。。与原来的500次执行相比,你对我的要求的理解也是正确的。顺便说一句,我不明白你提出的解决办法会有什么帮助。即使你必须把它放在memmory里,也需要10分钟。如果我选对了所有的代理。我愿意接受多线程以外的其他建议。如果是对数据库的查询,那么单个查询检索所有数据的速度要比500个查询检索数据子集的速度快得多。现在您可能正在执行类似于从GOF选择*的操作,其中AgencyCode=xxx大约500次。。。我建议将其更改为从GOF中选择*