Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保并行调用不会占用太多CPU_C#_Multithreading_Wcf_Parallel Processing - Fatal编程技术网

C# 确保并行调用不会占用太多CPU

C# 确保并行调用不会占用太多CPU,c#,multithreading,wcf,parallel-processing,C#,Multithreading,Wcf,Parallel Processing,我有一个带有WCF的C程序,它使用了一点并行调用 首先,每个客户端调用在服务端都与我的WCF服务并行 我有一个包含B类列表的a类 我可以添加B类的列表而不添加a 为了插入元素B的列表,我并行地做,因为在添加之前,我做了很多验证。还有一个 一些客户端一次性添加了一个非常大的元素列表 因此,我使用并行调用来添加每个a元素 我使用并行选项将其配置为使用不超过一半的CPU。 让做其他事情的其他用户使用CPU 但是,添加已经被并行限制到一半CPU的类A的任务会创建另一个并行调用来添加类B 例如,应 Inv

我有一个带有WCF的C程序,它使用了一点并行调用

首先,每个客户端调用在服务端都与我的WCF服务并行

我有一个包含B类列表的a类

我可以添加B类的列表而不添加a

为了插入元素B的列表,我并行地做,因为在添加之前,我做了很多验证。还有一个

一些客户端一次性添加了一个非常大的元素列表

因此,我使用并行调用来添加每个a元素

我使用并行选项将其配置为使用不超过一半的CPU。 让做其他事情的其他用户使用CPU

但是,添加已经被并行限制到一半CPU的类A的任务会创建另一个并行调用来添加类B

例如,应 InvokeAddClassAList 创建两个线程AddClassA

每一个AddClassA 创建两个线程AddClassB

所以,我现在有4个线程

这4个线程是否限制为CPU的一半? 或者只有两个AddClassA被限制为一半CPU,并且每个子线程可以使用他们想要的CPU

var pCount = Environment.ProcessorCount / 2;
var options = new ParallelOptions();
options.MaxDegreeOfParallelism = pCount > 0 ? pCount : 1;
Parallel.Invoke(options, actions.ToArray());

您的CPU是应该使用的资源。如果它闲置,没有人会感谢你。因此,限制您的流程是毫无意义的。你甚至不知道当时是否有其他人在使用电脑

您可以使用自己的实现来影响何时以及何时启动多少任务


但是,同样没有意义。你应该提出尽可能多的要求。如果你想善待其他用户,降低进程优先级,这样如果你想使用100%,他们仍然可以使用优先级更高的进程。

你能分享你做过的任何代码示例吗?并行执行允许在CPU可用时使用CPU容量。它并不是为了强迫一个过程使用特定的分数。这只是意味着,如果有更多的可用容量,那么一个活动不必被限制为一个线程。我的目的是限制任务列表的CPU使用量。即使有些cpu是可用的,我也不希望它使用超过一半的代码样本。。。。这是一个非常重要的方法,为什么我选择描述我的线程是如何工作的,而不是给出一个你可能会想到使用的混乱的代码样本。它不会限制CPU的使用量,但可以降低并行操作的程度,因此,可能会降低CPU内核的使用率。嗯,我不确定CPU始终保持100%的使用率是否好。但主要的目标是如果有人发射了很长的东西,他知道他会等待几秒钟/分钟。我想让后面的人使用Cpu,并启动一个非常短的操作。我不想让他等到有空的时候。。。当我知道一项任务是长期的。如果我的CPU使用率达到100%,它会降低想要什么东西的用户的速度。我在同一台机器上连接了20个人。所以我想发送一点消息,如果有人发布了一个非常重要的东西,让ressource为其他人提供服务……这不是MaxDegreeOfParallelism的目的。为了减少线程数量的使用?你似乎认为如果你想要100%,你就可以得到100%。每个过程都有优先权。资源是根据这个优先级分配的。例如,如果您有一个无止境循环和一个浏览器窗口,如果无止境循环具有更高的优先级,您将无法处理该窗口。如果将窗口设置为更高的优先级,您将能够毫无问题地浏览,因为只有剩余的资源将被分配给100%hog。因此,您的目标应该是使用100%,但您应该将流程的优先级设置为较低,以便只获得剩余的100%。没有意义的是使用正常优先级,但低于100%。你应该尽可能快地前进,为速度更快的人让路,总是以你的速度前进,但不为任何人让路,这意味着你总是迟到,有时会让其他人失望。我的服务是一个应用程序,有许多流程。。。所以他一次可以得到操作系统所能提供的最大值。但在我的应用程序中,我想做一点改变,并定义这个方法,特别是永远不会被授权一次使用100%的应用程序