Unity распечатывает загрузку ЦП на 100% - PullRequest
0 голосов
/ 06 мая 2020

Я сделал скрипт, который выводит на холст использование ЦП и ОЗУ.

Когда я запускаю этот скрипт, он всегда распечатывает Использование ЦП на 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";
    }
}

Любая помощь будет принята с благодарностью

snapshot of scene

ОБНОВЛЕНИЕ: я попытался сделать так, чтобы он не обновлялся каждый кадр, поэтому я добавил счетчик.

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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...