本人今日腦瓜一熱,忽然想在游戲中制作一個能檢測當前電腦CPU占用率的功能。
我知道這聽起來很蠢,所以請不要在這一點上浪費時間了。
首先我參考了幾個必要的庫:
using UnityEngine;
using System.Collections;
using System.Text;
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
然后運行環境設定為.net2.0,然后用如下代碼申請了一個全域的CPU監視器類
PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total");
呼叫PerformanceCounter類中的nextvalue函式獲得cpu占用率值并輸出到unity控制臺:
private void PerformanceCounterFun()
{
cpuLoad = pc.NextValue();
UnityEngine.Debug.Log("CPU load = " + cpuLoad + " %.");
UnityEngine.Debug.Log(pc.NextValue());
}
然后設定其每隔1.5秒執行一次:
IEnumerator startCount(){
while (true)
{
yield return new WaitForSeconds(1.5f);
PerformanceCounterFun();
}
}
然而實際運行起來后發現,除了第一次計數是0以外,后面的cpu占用率計數值始終為100,而資源管理器中的顯示數值僅有不到20%。。。我嘗試建立一個C#控制臺應用程式來做同樣的功能,能夠輸出較準確的值,因此API本身應該是沒錯的。我現在十分好奇為何在UNITY中我會一直得到100這個值。。。。。
本人小白,求大神講解。。。。。
uj5u.com熱心網友回復:
←_←表示占用率這個東東運行較慢好吧 干貨給你
private PerformanceCounter pcCpuLoad = new PerformanceCounter ("Processor", "% Processor Time", "_Total");
#region API
//獲取CPU占用率
public float CpuLoad {
get {
return pcCpuLoad.NextValue ();
}
}
#endregion
執行輸出
Console.WriteLine ("CCCCCCC" + CpuLoad);
uj5u.com熱心網友回復:
我忘了這個using System.Diagnostics;
uj5u.com熱心網友回復:
沒啥用啊老哥。。回傳值依然一直是100啊。。uj5u.com熱心網友回復:
還是100? 我自己試了 可以使用啊。。。uj5u.com熱心網友回復:
你確定你是在unity下用的嗎。。。。能不能給發我一個能用的的工程。。。。uj5u.com熱心網友回復:
使用get陳述句的意義是什么?。。uj5u.com熱心網友回復:
沒有任何意義。。。習慣使用get了。。。uj5u.com熱心網友回復:
好的 我給你寫一個吧uj5u.com熱心網友回復:
我擦嘞 我這個API是寫在服務器中的 并不是掛在unity中的uj5u.com熱心網友回復:
所以說這玩意在unity里用不了啊。。。始侄訓傳100。。不知道什么原因。。。大概mono算是個虛擬機?。。我最后呼叫kernel32里面的GetSystemTimes函式自己寫代碼算了CPU使用率。。。
但我仍然十分好奇為什么nextvalue一直回傳100。。。
uj5u.com熱心網友回復:
同在好奇中 同在困惑中 確實服務器可以使用 回傳值正確 unity確實不行uj5u.com熱心網友回復:
你順便把帖子結了吧 我需要分數(害羞臉?(? ???ω??? ?)?)uj5u.com熱心網友回復:
噫。。不開心。。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/61349.html
標籤:Unity3D
下一篇:unity游戲服務的撰寫
