我有一个文件加密程序。当程序加密文件时,它不会超过 25% 的 CPU 使用率,因此速度很慢。
如何让操作系统分配给它更多的 CPU 负载?(如WinRAR,压缩文件时,CPU负载达到100%)。
[编辑]:因为我的核心是 4 个,所以它不会使用多个核心。我怎样才能让它使用其余的核心?
我有一个文件加密程序。当程序加密文件时,它不会超过 25% 的 CPU 使用率,因此速度很慢。
如何让操作系统分配给它更多的 CPU 负载?(如WinRAR,压缩文件时,CPU负载达到100%)。
[编辑]:因为我的核心是 4 个,所以它不会使用多个核心。我怎样才能让它使用其余的核心?
除非您以其他方式限制应用程序,否则它将使用操作系统允许的尽可能多的 CPU - 默认情况下应该高达 100%。我猜想其他一些资源是瓶颈。
您是否正在流式传输数据以从远程位置进行加密?从由于某种原因相当慢的磁盘?
如果您的工具是单线程程序,那么它只消耗一个内核!如果您的程序仅执行 for 循环或其他类型的循环,则该内核的性能将达到 100%。如果该工具必须执行 I/O,那么它永远不会具有最高性能。你看到的 25% 是每个 cpu 核心。我记得有一些帖子向您展示了如何显示每个 cpu 核心的消耗百分比!
有时人们认为高 CPU 百分比意味着一个高效的程序。如果是这样,无限循环将是最有效的。
当您有一个基本上处理机械硬盘驱动器上的文件的程序时,理想情况下它应该是 IO 绑定的,因为只需完成读取文件。即 CPU 部分应该足够高效,与将文件移出磁盘相比,它需要的时间百分比很低。你可以做的任何减少 CPU 时间的事情都会减少 CPU 百分比,因为 I/O 占总数的百分比更大,反之亦然。如果您可以在两者之间来回切换,首先减少 CPU(程序调整),然后减少 I/O(例如固态驱动器),您就可以让它真正飞起来。
然后,如果 CPU 部分仍然花费比您想要的时间更长的时间,请务必将其分流到多个内核上。
以防万一,如果您使用的是 v4.0,而不是分配更多的 CPU 负载,请尝试使用Parallel Framework(PFX)。它针对多核处理器进行了优化。.
Parallel.Invoke(() => DoCompress());
此外,C#中的线程是宇宙中最好的线程相关资源。
这与处理器和分配资源无关:您使用的工具根本不适合使用所有(我猜)cpu 的 4 个内核。