- Home /
Question by
smeagols · May 04, 2016 at 07:45 AM ·
memorystandalone
know how many free memory on System? Windows Standalone
Hi,
I need to know how many free memory are on System on real time.
I'm on Windows Standalone Application.
I use
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
public float getAvailableRAM(){
return ramCounter.NextValue();
}
but always return 0!!
Any solution?
Comment
Best Answer
Answer by smeagols · May 05, 2016 at 10:54 AM
I found how to do this.
using UnityEngine;
using System.Collections;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System;
public class PerformanceDataInfo : MonoBehaviour {
public class PerfomanceInfoData
{
public Int64 CommitTotalPages;
public Int64 CommitLimitPages;
public Int64 CommitPeakPages;
public Int64 PhysicalTotalBytes;
public Int64 PhysicalAvailableBytes;
public Int64 SystemCacheBytes;
public Int64 KernelTotalBytes;
public Int64 KernelPagedBytes;
public Int64 KernelNonPagedBytes;
public Int64 PageSizeBytes;
public int HandlesCount;
public int ProcessCount;
public int ThreadCount;
}
[StructLayout(LayoutKind.Sequential)]
public struct PsApiPerformanceInformation
{
public int Size;
public IntPtr CommitTotal;
public IntPtr CommitLimit;
public IntPtr CommitPeak;
public IntPtr PhysicalTotal;
public IntPtr PhysicalAvailable;
public IntPtr SystemCache;
public IntPtr KernelTotal;
public IntPtr KernelPaged;
public IntPtr KernelNonPaged;
public IntPtr PageSize;
public int HandlesCount;
public int ProcessCount;
public int ThreadCount;
}
[DllImport("psapi.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetPerformanceInfo([Out] out PsApiPerformanceInformation PerformanceInformation, [In] int Size);
// Use this for initialization
void Start () {
}
static double ConvertBytesToMegabytes(long bytes)
{
return (bytes / 1024f) / 1024f;
}
public static PerfomanceInfoData GetPerformanceInfo()
{
PerfomanceInfoData data = new PerfomanceInfoData();
PsApiPerformanceInformation perfInfo = new PsApiPerformanceInformation();
if (GetPerformanceInfo(out perfInfo, Marshal.SizeOf(perfInfo)))
{
/// data in pages
data.CommitTotalPages = perfInfo.CommitTotal.ToInt64();
data.CommitLimitPages = perfInfo.CommitLimit.ToInt64();
data.CommitPeakPages = perfInfo.CommitPeak.ToInt64();
/// data in bytes
Int64 pageSize = perfInfo.PageSize.ToInt64();
data.PhysicalTotalBytes = perfInfo.PhysicalTotal.ToInt64() * pageSize;
data.PhysicalAvailableBytes = perfInfo.PhysicalAvailable.ToInt64() * pageSize;
data.SystemCacheBytes = perfInfo.SystemCache.ToInt64() * pageSize;
data.KernelTotalBytes = perfInfo.KernelTotal.ToInt64() * pageSize;
data.KernelPagedBytes = perfInfo.KernelPaged.ToInt64() * pageSize;
data.KernelNonPagedBytes = perfInfo.KernelNonPaged.ToInt64() * pageSize;
data.PageSizeBytes = pageSize;
/// counters
data.HandlesCount = perfInfo.HandlesCount;
data.ProcessCount = perfInfo.ProcessCount;
data.ThreadCount = perfInfo.ThreadCount;
}
return data;
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612080128im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Windows Standalone crashing silently during scene switching 2 Answers
bug or new feature ? 1 Answer
Unity maximum memory? 1 Answer
CPU and memory usage between a Unity projet in Web Player and as a standalone 0 Answers
Do I need to manually destroy material/model instances that are lazily copied? 2 Answers