Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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#_Wpf_Parallel Processing_Cpu Usage - Fatal编程技术网

C# 提高CPU利用率

C# 提高CPU利用率,c#,wpf,parallel-processing,cpu-usage,C#,Wpf,Parallel Processing,Cpu Usage,我正在开发WPF/C#桌面应用程序 我有两种方法(让我们调用任务)。每个任务占用10%的CPU,整个应用程序也占用10%。所以 当我在一个实例中运行这两个任务时,它会划分CPU利用率(每个任务5%,因此进程明显变慢) 当我运行应用程序的两个实例,并在每个应用程序上运行一个任务时。一切都好。总利用率为20%,两个任务的利用率应为20% 现在的问题是:如何在应用程序的一个实例中使用20%的CPU利用率 我不能添加代码,因为对我的应用程序进行分析非常复杂 完整场景: 这是一个人脸识别应用程序。第一台3

我正在开发WPF/C#桌面应用程序

我有两种方法(让我们调用
任务
)。每个任务占用10%的CPU,整个应用程序也占用10%。所以

  • 当我在一个实例中运行这两个任务时,它会划分CPU利用率(每个任务5%,因此进程明显变慢)

  • 当我运行应用程序的两个实例,并在每个应用程序上运行一个任务时。一切都好。总利用率为20%,两个任务的利用率应为20%

  • 现在的问题是:如何在应用程序的一个实例中使用20%的CPU利用率

    我不能添加代码,因为对我的应用程序进行分析非常复杂

    完整场景:

    这是一个人脸识别应用程序。第一台30帧/秒的摄像机使用10%的CPU。当第二个摄像头启动时,两个fps都会降低到15 fps,应用程序的总利用率仍然是10%(不会增加,但会降低任务的速度,就像fps一样)


    当我运行应用程序的两个实例时,每个实例都有一个摄像头。两个实例上的FPS都是30,CPU利用率总共是20%。这就是全部情节

    首先,CPU的使用将取决于您在异步运行的方法中执行的操作。如果存在等待外部资源到来的操作(例如,如果您有从internet获取数据的线程),或者存在许多I/O操作,那么CPU使用率可能不会很高,因为线程将主要等待数据到来,而不是进行计算。在执行大量计算操作时,线程上的CPU使用率可能会很高。您可能会更改异步运行的代码以增加CPU使用率-这是一个非常笼统的评论,但不能给出其他评论,因为我们没有看到您的代码


    其次-如果您直接在代码中使用
    线程
    ,那么
    线程
    类上有一个
    优先级
    属性,您可以尝试增加它-但是您不能保证CPU使用量会增加。另外,为线程设置高优先级以提高CPU使用率,您需要记住,您正在冒着在同一台机器上运行的其他应用程序可能“饥饿”的风险(即,它们的性能将因您的代码而降低)

    我没有使用任何可能很慢的异步进程,我已经解释了一些场景。我希望现在能更容易理解这个问题。好吧,在你编辑之后,这是一件不同的事情。但我们不知道在应用程序中如何处理来自摄像头的数据。你说了两种方法,你怎么知道每种方法占用10%的CPU?这听起来像是他们在并行工作。这两种方法怎么称呼?如果没有一段代码,我不能给出更多的建议。我希望我能创建最小的工作示例。我提到了这两个
    任务
    我正在处理相机。实际上,利用率并不重要。但无论我在问题中解释了什么,都是我的分析,我已经在几乎4到5个不同的配置系统上检查过了(每个系统上的利用率%变化,但两个进程都保持不变),每个系统上的fps降到了15。我真的帮不了你,因为你没有提供基本信息来帮助你。如果您使用System.Threading.tasks.Task和async,您会说“tasks”,那么我不知道是否有办法提高CPU使用率。对于线程类,您可以按照我在回答中所写的那样操作。如果您使用不同的编程解决方案来处理摄像头数据-我不知道。我使用的是
    并行。调用
    调用一个方法来启动摄像头并开始从中获取帧。了解如何控制fps非常重要。是否有轮询或事件触发?每次新帧出现时,它都会触发一个事件,然后在事件处理程序中传递给人脸检测和识别方法,最后图像被分配给
    imagebox
    。是否同步处理事件?请给我们看一点代码。我尝试创建一个exmaple