有第二个代码:
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/