Tag: cpu usage

无限循环消耗100%的CPU

我陷入了需要生成某个Hz的定义频率的情况。 我已经尝试过多媒体计时器和互联网上提供的所有其他东西,但到目前为止,一些if-else条件的无限循环给了我最好的结果。 但是这种方法的问题在于它消耗了几乎所有的cpu,没有其他应用程序正常工作的空间。 我需要一种算法,要么产生一些Hz到KHz的频率。 我正在使用带有C#的windows平台。

获取CPU和RAM使用率

我需要在执行进程期间获取ram内存和CPU使用率(该进程有时可以运行超过30分钟)。 与任务管理器的值相比,我能够获得可用RAM但CPU使用率不正确。 难道我做错了什么? 这是我的代码: class Program { static List AvailableCPU = new List(); static List AvailableRAM = new List(); protected static PerformanceCounter cpuCounter; protected static PerformanceCounter ramCounter; static void Main(string[] args) { cpuCounter = new PerformanceCounter(); cpuCounter.CategoryName = “Processor”; cpuCounter.CounterName = “% Processor Time”; cpuCounter.InstanceName = “_Total”; ramCounter = new PerformanceCounter(“Memory”, “Available MBytes”); try { […]

任务并行不稳定,有时使用100%CPU

我目前正在测试Parallel for C#。 通常它工作正常,使用并行比正常的foreach循环更快。 但是,有时(如5次中的1次),我的CPU将达到100%的使用率,导致并行任务非常慢。 我的CPU设置为i5-4570,内存为8gb。 有谁知道为什么会出现这个问题? 下面是我用来测试函数的代码 // Using normal foreach ConcurrentBag resultData = new ConcurrentBag(); Stopwatch sw = new Stopwatch(); sw.Start(); foreach (var item in testData) { if (item.Equals(1)) { resultData.Add(item); } } Console.WriteLine(“Normal ForEach ” + sw.ElapsedMilliseconds); // Using list parallel for resultData = new ConcurrentBag(); sw.Restart(); System.Threading.Tasks.Parallel.For(0, testData.Count() – 1, (i, […]

线程获得100%CPU非常快

我在C#中实现了一个非常基本的线程: private Thread listenThread; public void startParser() { this.listenThread = new Thread(new ThreadStart(checkingData)); this.listenThread.IsBackground = true; this.listenThread.Start(); } private void checkingData() { while (true) { } } 然后我立即获得100%的CPU。 我想检查传感器数据是否在while(true)循环内读取。 为什么会这样? 提前致谢。

使用WMI和C#的CPU使用率

如何使用WMI检索c#中的当前CPU使用率? 我见过很多使用性能计数器的post,但我需要一个可以与远程机器一起使用的解决方案。 我也在这里找到了一个VB解决方案,但如果可能的话,我更愿意在C#中实现。

在线程中的无限循环中,cpu使用率增加到100%

我在ASP.NET Web应用程序中实现了一个基于Web的聊天平台,我使用类似于长轮询的技术。 我的意思是我将来自客户端的每个Web请求保留特定时间段(超时)或直到新消息到达,然后将响应发送到客户端。 我将连接的客户端保留在内存中(字典对象),当有新消息发送到客户端时,我将此消息写入接收方客户端的消息数组中。 客户端需要发送请求以获取自己的消息,并将此请求保存在内存中的数组中。 我正在使用异步http处理程序来监听客户端请求,我将Web请求保存在内存中的数组中。 我使用线程从内存中连续检查新消息(在为每个客户端创建的字典中)。 我不使用.net线程池线程来检查新消息或超时web请求。我创建这样的线程: System.Threading.Thread t = new Thread(new ThreadStart(QueueCometWaitRequest_WaitCallback)); t.IsBackground = false; t.Start(); 在每个线程的QueueCometWaitRequest_WaitCallback方法中,我处于无限循环中: while (true) { … Thread.Sleep(100); } 在这个方法中,我正在检查Web请求超时或每个Web请求的新消息,它也保存在内存中的数组中。 一切都很顺利,直到我注意到CPU使用率达到了100%的时间。 (在第一个连接的客户端之后的几分钟内)在第一个请求开始时,一切似乎都正常,我的意思是在向客户端返回响应时CPU使用率不高于10%。 但即使有2个客户端,CPU使用率也会增加到100%。 只有在写入客户端请求的响应时,CPU使用率似乎是100%。 如果没有客户端,那么一切都恢复正常(CPU使用率约为0%),直到客户端完成新的Web请求。 我不太详细地知道线程,但我怀疑我创建的新线程并且无限地工作。 这就像操作系统因为它们一直在工作而及时为它们提供更多的CPU使用和资源,并且这个Thread.Sleep(100)不起作用。 这是QueueCometWaitRequest_WaitCallback()方法: void QueueCometWaitRequest_WaitCallback() { while (true) { if (processRequest.Length == 0) { Thread.Sleep(100); } else { for (int i = 0; i […]

从Process.TotalProcessorTime计算进程cpu使用情况

我一直试图摆脱使用PerformanceCounter类来监视进程的CPU使用情况,因为当进程计数变得非常高时(监视大量进程时)它似乎需要相当数量的CPU。 我的第一种方法是使用Win32_PerfFormattedData_PerfOS_Processor类和PercentProcessorTime属性来获取WMI路由,但是在尝试计算多个核心的CPU使用率时似乎存在问题(它返回的最大值是100%,因此无法根据它进行划分关于CPU核心数,导致结果不准确)。 所以最后我决定使用Process的类TotalProcessorTime属性。 遗憾的是,我不确定如何根据该值计算Process使用的总CPU使用百分比。 我知道我应该从之前的PercentProcessorTime值中减去当前的PercentProcessorTime值,以获得处理器在特定时间限制内花费了多少时间,但我不确定如何从那里继续。 提前致谢。

性能计数器当前进程的CPU使用率超过100

我想显示我的multithreading应用程序的CPU使用率(在多核处理器上工作)。 我想收到任务经理附近的数字。 但我得到的数字超过100%。 甚至超过500%。 是的,我知道,对于类别“进程”的计数器“%Processor Time”我需要分为Environment.ProcessorCount或“NumberOfLogicalProcessors” (我的配置相同)。 此操作后结果为500%。 我在具有不同硬件(i7,i5,Core2)和软件配置(带有所有更新的Windows 7 SP1,带有所有更新的Windows 2008 R2 SP1)的不同计算机上测试了此示例,并遇到了同样的问题。 public static class SystemInfo { private static Process _thisProc; private static bool HasData = false; private static PerformanceCounter _processTimeCounter; private static void Init() { if (HasData) return; if (CheckForPerformanceCounterCategoryExist(“Process”)) { _processTimeCounter = new PerformanceCounter(); _processTimeCounter.CategoryName = “Process”; _processTimeCounter.CounterName = “% Processor […]

读取NetworkStream = 100%的CPU使用率

我正在从一个while循环的NetworkStream中读取。 问题是我看到100%的CPU使用率。 有没有办法阻止这种情况发生? 这是我到目前为止: while (client != null && client.Connected) { NetworkStream stream = client.GetStream(); data = null; try { // Check if we are still connected. if (client.Client.Poll(0, SelectMode.SelectRead)) { byte[] checkConn = new byte[1]; if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0) { throw new IOException(); } } if (stream.DataAvailable) { //Read the first command WriteToConsole(“Waiting […]

PerformanceCounter报告的CPU使用率高于观察到的CPU使用率

我目前正在这样做: PerformanceCounter cpuUsage = new PerformanceCounter(“Processor”, “% Processor Time”, “_Total”); cpuUsage.NextValue(); System.Threading.Thread.Sleep(1000); RV = cpuUsage.NextValue(); 我定期调用该函数以获得CPU使用率。 当我在TaskManager中监视系统时,PerformanceCounter报告的CPU使用率始终比TaskManager报告的高出15-20%(TaskManager中的30%=来自PerformanceCounter的50%)。 也许有我忽略的文档,但有没有人有解释? 也许它检查的瞬间CPU使用率更高,任务管理器报告平均值?