Я сделал скрипт, который выводит на холст использование ЦП и ОЗУ.
Когда я запускаю этот скрипт, он всегда распечатывает Использование ЦП на 100% и RAM на 0 МБ.
Я поискал в Google и не смог найти решение, которое исправило бы это для меня.
Я также пробовал использовать "yield return new WaitForSeconds (1)" в функции обновления перед labelText обновляется, но компилятор не был большим поклонником этого
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI;
public class DisplayCPUUsage : MonoBehaviour
{
public Text labelText;
private PerformanceCounter cpuCounter, ramCounter;
private string processorType;
private int processorCount, processorFrequency;
private GameObject label;
private Canvas canvas;
private RectTransform textRectTransform;
// Use this for initialization
void Start ()
{
System.Diagnostics.PerformanceCounterCategory.Exists("PerformanceCounter");
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); // Initialises the cpuCounter as a performance counter
ramCounter = new PerformanceCounter("Memory", "Available MBytes"); // Initialises the ramCounter as a performance counter
processorType = SystemInfo.processorType;
processorCount = SystemInfo.processorCount;
processorFrequency = SystemInfo.processorFrequency;
canvas = GameObject.Find("MainCanvas").GetComponent<Canvas>(); // Find the canvas Game Object
label = new GameObject(); // Initialise the label as a new Game Object
label.transform.parent = canvas.transform; // Make canvas the parent object
label.name = "CPUUsage"; // The name of the label
labelText = label.AddComponent<Text>();
labelText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
labelText.fontSize = 20;
labelText.color = Color.black;
labelText.horizontalOverflow = HorizontalWrapMode.Overflow;
labelText.verticalOverflow = VerticalWrapMode.Overflow;
labelText.alignment = TextAnchor.MiddleCenter;
textRectTransform = labelText.GetComponent<RectTransform>();
textRectTransform.localPosition = new Vector3(-450, 146, 75);
textRectTransform.sizeDelta = new Vector2(3, 3);
textRectTransform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
textRectTransform.localRotation = Quaternion.Euler(new Vector3(0, 0, 0));
textRectTransform.pivot = new Vector3(0, 0, 0);
// For questions on the specifics of the code, see FarmLabelTextBox.cs for detailed comments
}
// Update is called once per frame
void Update ()
{
labelText.text =
"Your Processor\n" + processorType +
"\n\nNumber of Cores\n" + processorCount +
"\n\nProcessor frequency\n" + processorFrequency +
"\n\n\nCPU: " + getCurrentCpuUsage() + // This fetches the CPU usage
"\n\nRAM: " + getAvailableRAM(); // This fetches the RAM usage
}
public string getCurrentCpuUsage()
{
return cpuCounter.NextValue() + "%";
}
public string getAvailableRAM()
{
return ramCounter.NextValue() + "MB";
}
}
Любая помощь будет принята с благодарностью
ОБНОВЛЕНИЕ: я попытался сделать так, чтобы он не обновлялся каждый кадр, поэтому я добавил счетчик.
void Update ()
{
updateSystemStats++;
if (updateSystemStats == 150)
{
labelText.text =
"Your Processor\n" + processorType +
"\n\nNumber of Cores\n" + processorCount +
"\n\nProcessor frequency\n" + processorFrequency +
"\n\n\nCPU: " + getCurrentCpuUsage() + // This fetches the CPU usage
"\n\nRAM: " + getAvailableRAM(); // This fetches the RAM usage
updateSystemStats = 0;
}