C# 如何利用我的计算资源

C# 如何利用我的计算资源,c#,performance,multithreading,utilization,C#,Performance,Multithreading,Utilization,我写了一个程序来解决一个复杂的问题。该程序只是一个c#控制台应用程序,在计算部分完成之前不会执行console.write,因此输出不会影响性能。 程序是这样的: static void Main(string[] args) { Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize); WorkerThread.Priority = ThreadPrio

我写了一个程序来解决一个复杂的问题。该程序只是一个c#控制台应用程序,在计算部分完成之前不会执行console.write,因此输出不会影响性能。 程序是这样的:

static void Main(string[] args)
        {

            Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize);
            WorkerThread.Priority = ThreadPriority.Highest;
            WorkerThread.Start();
            Console.WriteLine("Worker thread is runing...");
            WorkerThread.Join();
        }
现在运行需要3分钟,当我打开我的任务管理器时,我看到它只占用12%的cpu时间。我实际上有一个i7 intel cpu,带有6G三通道DDR3内存。我想知道如何提高硬件的利用率


非常感谢

1个线程只能占用1个核心,因此您需要将任务分成多个线程以利用您的CPU。您是否绝对确定自己没有在算法中执行IO操作?

以百分比计算,找出它所花费的时间。我有一些程序,我确信我没有做任何I/O,猜猜怎么着?我是,因为最模糊的原因。

您的i7支持超线程,因此四核i7可以同时处理八个线程

您的程序似乎使用一个线程,因此Windows任务管理器将显示12-13%的CPU使用率,因为您使用了八个可用“虚拟”CPU中的一个


正如HeavyWave所说,您需要找到一种方法将计算拆分为更多线程,以便并行运行以获得更高的cpu使用率。

英特尔i7应报告为8核(4个物理核,由于超线程,每个物理核报告为2核)

通过启动一个线程,您应该获得12.5%的CPU。这几乎完全符合你所描述的

一个线程不能也不会在消耗所有资源的多个内核上运行。 如果你想使用更多的资源,你需要启动多个线程。理想情况下,您至少需要4个线程,更可能需要6到8个线程才能接近100%的利用率


为此,您需要找到一种方法,将“复杂问题”分解为可并行化的指令路径。

您可以随时用我的处理器替换您的处理器。我保证至少60%的使用率。好吧,也许你的CPU大部分时间都在等待内存。在任何情况下,使用1个线程,您将无法使用超过25%的CPU。