【发布时间】:2019-06-20 10:44:41
【问题描述】:
在 unity3d 中,我试图读取系统使用情况,以便在一个人玩 VR 游戏时查看 CPU 和 RAM 使用情况。我知道如何在电脑屏幕上显示它,以及如何让它远离玩家的 VR 屏幕。
据我所知,我一直在搜索 Google。他们中的大多数导致相同的答案,我似乎无法正常工作。
我一直在查看帖子:https://answers.unity.com/questions/506736/measure-cpu-and-memory-load-in-code.html,它引导我进入 stackoverflow 页面:How to get the CPU Usage in C#?
在这些帖子中,他们总是遇到 CPU 使用率停留在 100% 的问题,即使这是不正确的。我一直在尝试 System.Threading.Thread.Sleep(1000)。但这会将整个游戏锁定为 1fps,因为它每秒等待 1 秒。即使有 1fps,我也无法获得 100% 的读取率。
在这段代码中,我使用了睡眠线程,它将游戏速度降低到 1fps
using UnityEngine;
using System.Diagnostics;
using TMPro;
public class DebugUIManager : MonoBehaviour
{
private PerformanceCounter cpuCounter;
[SerializeField] private TMP_Text cpuCounterText;
private void Start()
{
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
}
private void Update()
{
cpuCounterText.text = getCurrentCpuUsage();
}
private string getCurrentCpuUsage()
{
dynamic firstValue = cpuCounter.NextValue() + "% CPU";
System.Threading.Thread.Sleep(1000);
dynamic secondValue = cpuCounter.NextValue() + "% CPU";
return secondValue;
}
}
每当我改变时
private string getCurrentCpuUsage()
{
dynamic firstValue = cpuCounter.NextValue() + "% CPU";
System.Threading.Thread.Sleep(1000);
dynamic secondValue = cpuCounter.NextValue() + "% CPU";
return secondValue;
}
到
private string getCurrentCpuUsage()
{
return cpuCounter.NextValue() + "%";
}
游戏不会以 fps 下降,但它也不会做任何事情。
我没有收到任何错误消息,因为它运行时没有问题。但我真的很想知道如何获得 CPU 使用率,所以我可以自己弄清楚其余的。
任何有帮助的答案将不胜感激。
【问题讨论】:
-
您可以为此使用计时器。并通过计时器滴答获取值。 0.5 或 1 秒就足够了
-
它会减慢到 1fps,因为每帧你都会在其中等待 1 秒..
-
当使用协程执行设置的文本时,我现在让它等待 1 秒。现在它在 0% 时进入第一秒,然后在 100% 时进入第二秒
-
System.Threading.Thread.Sleep(1000);将整个 Unity 进程冻结 1 秒 .. 我想这不是你真正想要的。即使使用协程,您也应该改用yield return new WaitForSeconds (1);。你为什么使用dynamic已经很清楚你总是得到string?您的意思是使用var吗?