3

我有一个文件加密程序。当程序加密文件时,它不会超过 25% 的 CPU 使用率,因此速度很慢。

如何让操作系统分配给它更多的 CPU 负载?(如WinRAR,压缩文件时,CPU负载达到100%)。


[编辑]:因为我的核心是 4 个,所以它不会使用多个核心。我怎样才能让它使用其余的核心?

4

5 回答 5

2

除非您以其他方式限制应用程序,否则它将使用操作系统允许的尽可能多的 CPU - 默认情况下应该高达 100%。我猜想其他一些资源是瓶颈。

您是否正在流式传输数据以从远程位置进行加密?从由于某种原因相当慢的磁盘?

于 2011-07-06T14:34:11.527 回答
1

如果您的工具是单线程程序,那么它只消耗一个内核!如果您的程序仅执行 for 循环或其他类型的循环,则该内核的性能将达到 100%。如果该工具必须执行 I/O,那么它永远不会具有最高性能。你看到的 25% 是每个 cpu 核心。我记得有一些帖子向您展示了如何显示每个 cpu 核心的消耗百分比!

于 2011-07-06T14:37:51.013 回答
1

有时人们认为高 CPU 百分比意味着一个高效的程序。如果是这样,无限循环将是最有效的。

当您有一个基本上处理机械硬盘驱动器上的文件的程序时,理想情况下它应该是 IO 绑定的,因为只需完成读取文件。即 CPU 部分应该足够高效,与将文件移出磁盘相比,它需要的时间百分比很低。你可以做的任何减少 CPU 时间的事情都会减少 CPU 百分比,因为 I/O 占总数的百分比更大,反之亦然。如果您可以在两者之间来回切换,首先减少 CPU(程序调整),然后减少 I/O(例如固态驱动器),您就可以让它真正飞起来。

然后,如果 CPU 部分仍然花费比您想要的时间更长的时间,请务必将其分流到多个内核上。

于 2011-07-06T18:11:35.297 回答
1

以防万一,如果您使用的是 v4.0,而不是分配更多的 CPU 负载,请尝试使用Parallel Framework(PFX)针对多核处理器进行了优化.

Parallel.Invoke(() => DoCompress());

此外,C#中的线程是宇宙中最好的线程相关资源。

于 2011-07-06T18:46:51.397 回答
-1

这与处理器和分配资源无关:您使用的工具根本不适合使用所有(我猜)cpu 的 4 个内核。

于 2011-07-06T14:34:22.170 回答