Unity printing out CPU Usage at 100%
I've made a script which prints out the CPU and RAM usage on a canvas.
When I run this script, it always prints out CPU Usage at 100% and available ram at 0MB. Apart from when it first updates, then it shows CPU Usage as 0%.
I've searched around Google and couldn't find a solution that fixed it for me.
I've also tried using "yield return new WaitForSeconds(1)" in the update function before the labelText gets updated, but the compiler wasn't a big fan of that,I've made a script which prints out the CPU and RAM usage on a canvas.
When I run this script, it always prints out CPU Usage at 100% and ram at 0MB. Apart from the first time it updates, then the CPU usage also prints out 0%.
I've searched around Google and couldn't find a solution that fixed it for me.
I've also tried using "yield return new WaitForSeconds(1)" in the update function before the labelText gets updated, but the compiler wasn't a big fan of that
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI;
public class DisplayCPUUsage : MonoBehaviour
{
public Text labelText;
private int updateSystemStats = 0;
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 ()
{
StartCoroutine("getCurrentCPUUsage");
StartCoroutine("getAvailableRam");
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 this code, see FarmLabelTextBox.cs for detailed comments
}
// Update is called once per frame
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;
}
}
public string getCurrentCpuUsage()
{
return cpuCounter.NextValue() + "%";
}
public string getAvailableRAM()
{
return ramCounter.NextValue() + "MB";
}
}
Your answer
Follow this Question
Related Questions
Rendering times in profiler/app improve simply by tapping screen on mobile device, weird.. 0 Answers
How do I open the performance measurement gauge in unity? 0 Answers
Animation drops game FPS 0 Answers
run an external exe if that specific exe is not running after sometime - run it 1 Answer
System.Daignostic. Stopwatch Not working on Builds but Works in Editor 2017.2.0p2 0 Answers