c# - 为什么 CPU 使用率不增加?

标签 c# windows multithreading concurrency cpu

有第二个代码:

class Methods
{
    public MemoryStream UniqPicture(string imagePath)
    {
        var photoBytes = File.ReadAllBytes(imagePath); // change imagePath with a valid image path
        var quality = 70;
        var format = ImageFormat.Jpeg; // we gonna convert a jpeg image to a png one
        var size = new Size(200, 200);

        using (var inStream = new MemoryStream(photoBytes))
        {
            using (var outStream = new MemoryStream())
            {

                using (var imageFactory = new ImageFactory())
                {

                    imageFactory.Load(inStream)
                        .Rotate(new Random().Next(-7, 7))
                        .RoundedCorners(new RoundedCornerLayer(190))
                        .Pixelate(3, null)
                        .Contrast(new Random().Next(-15, 15))
                        .Brightness(new Random().Next(-15, 15))
                        .Quality(quality)
                        .Save(outStream);
                }

                return outStream;
            }
        }
    }

    public void StartUniq()
    {
        var files = Directory.GetFiles("mypath");
        Parallel.ForEach(files, (picture) => { UniqPicture(picture); });
    }

}

当我启动 StartUniq() 方法时,我的 CPU 占用率只有 12-13%,仅此而已。我可以使用更多的 CPU 百分比来执行此操作吗?为什么不增加?

我试着用 python 来做,它也只有 12-13%。这是酷睿 i7 8700。

唯一让它运行更快的方法是启动第二个应用程序窗口。

这是窗口限制?使用 Windows Server 2016。

我认为这是系统限制,因为如果我尝试这个简单的代码,它也会占用 12% 的 CPU!

 while (true)
        {
            var a = 1 + 2;
        }

最佳答案

一些研究表明您正在使用 https://imageprocessor.org/ 中的 ImageFactory ,它包装了 System.Drawing。 System.Drawing 本身通常是 GDI/GDI+ 的包装器,它...包含进程范围的锁,因此您对多线程的尝试将受到严重的瓶颈。尝试更好的图像库。

关于c# - 为什么 CPU 使用率不增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58136391/

相关文章:

c# - 如何使用 XmlTextWriter 生成 CDATA?

c - 简单的 XOR 加密给出意想不到的结果

c++ - OpenMP、MPI、POSIX 线程、std::thread、boost::thread 如何关联?

c++ - 是否可以在 [win-builder](http ://win-builder. r-project.org/) 上构建一个使用 Rcpp 和 Boost.Thread 的 R 包?

c++ - OpenMP 条件并行化 - 并行部分中 if 子句的语法

c# - 如何使用 HTTPRequestMessage 添加 SOAP 身份验证 header ?

c# - 以表格形式查看 XML 数据

javascript - 我如何分配字典(键:value) pair data using formdata to controller action in MVC

windows - 在窗口调整大小事件

c++ - 在 C++ 中记录 SEH 错误