- Регистрация
- 21 Фев 2017
- Сообщения
- 219
- Реакции
- 74
- Баллы
- 3
[HIDE]
[/HIDE]
Код:
public static class MemoryInfo
{
[DllImport("psapi.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetPerformanceInfo(
[Out] out PerformanceInformation PerformanceInformation,
[In] int Size);
public static RAM GetValues()
{
var ram = new RAM();
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
ram.CommitLimit =
Convert.ToInt64(pi.CommitLimit.ToInt64()*
pi.PageSize.ToInt64());
ram.CommitPeak =
Convert.ToInt64(pi.CommitPeak.ToInt64()*
pi.PageSize.ToInt64());
ram.CommitTotal =
Convert.ToInt64(pi.CommitTotal.ToInt64()*
pi.PageSize.ToInt64());
ram.KernelNonPaged =
Convert.ToInt64(pi.KernelNonPaged.ToInt64()*
pi.PageSize.ToInt64());
ram.KernelPaged =
Convert.ToInt64(pi.KernelPaged.ToInt64()*
pi.PageSize.ToInt64());
ram.KernelTotal =
Convert.ToInt64(pi.KernelTotal.ToInt64()*
pi.PageSize.ToInt64());
ram.PageSize = Convert.ToInt64(pi.PageSize.ToInt64());
ram.PhysicalAvailable =
Convert.ToInt64(pi.PhysicalAvailable.ToInt64()*
pi.PageSize.ToInt64());
ram.PhysicalTotal =
Convert.ToInt64(pi.PhysicalTotal.ToInt64()*
pi.PageSize.ToInt64());
ram.ProcessCount = pi.ProcessCount;
ram.SystemCache =
Convert.ToInt64(pi.SystemCache.ToInt64()*
pi.PageSize.ToInt64());
ram.ThreadCount = pi.ThreadCount;
ram.HandlesCount = pi.HandlesCount;
ram.PhysicalAvailableAsPercent = ram.PhysicalAvailable/
(float) ram.PhysicalTotal*100.0f;
ram.CommitLimitAsPercent = ram.CommitLimit /
(float)ram.PhysicalTotal * 100.0f;
ram.CommitPeakAsPercent = ram.CommitPeak /
(float)ram.PhysicalTotal * 100.0f;
ram.CommitTotalAsPercent = ram.CommitTotal /
(float)ram.PhysicalTotal * 100.0f;
}
return ram;
}
public static int GetThreadCount()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return pi.ThreadCount;
}
return -1;
}
public static int GetProcessCount()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return pi.ProcessCount;
}
return -1;
}
public static int GetHandlesCount()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return pi.HandlesCount;
}
return -1;
}
public static long GetPageSize()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.PageSize.ToInt64()*pi.PageSize.ToInt64());
}
return -1;
}
public static long GetKernelNonPaged()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.KernelNonPaged.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetKernelPaged()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.KernelPaged.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetKernelTotal()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.KernelTotal.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetSystemCache()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.SystemCache.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetCommitLimit()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.CommitLimit.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetAvailableMemory()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.PhysicalAvailable.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetTotalMemory()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return Convert.ToInt64(pi.PhysicalTotal.ToInt64()*pi.PageSize.ToInt64());
}
return -1;
}
public static long GetCommitCharge()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.CommitTotal.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static long GetPeakCommitCharge()
{
var pi = new PerformanceInformation();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return
Convert.ToInt64(pi.CommitPeak.ToInt64()*
pi.PageSize.ToInt64());
}
return -1;
}
public static ulong GetTotalMemoryEx()
{
var CI = new ComputerInfo();
return CI.TotalPhysicalMemory;
}
public static ulong GetFreeRAM()
{
var CI = new ComputerInfo();
return CI.AvailablePhysicalMemory;
}
[StructLayout(LayoutKind.Sequential)]
public struct PerformanceInformation
{
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;
}
public struct RAM
{
public long CommitLimit;
public float CommitLimitAsPercent;
public long CommitPeak;
public float CommitPeakAsPercent;
public long CommitTotal;
public float CommitTotalAsPercent;
public int HandlesCount;
public long KernelNonPaged;
public long KernelPaged;
public long KernelTotal;
public long PageSize;
public long PhysicalAvailable;
public float PhysicalAvailableAsPercent;
public long PhysicalTotal;
public int ProcessCount;
public long SystemCache;
public int ThreadCount;
}
public struct SYSTEM_PERFORMANCE_INFORMATION
{
public int AvailablePages;
public int CacheRead;
public int CacheReadIos;
public int CacheTransitionFaults;
public int CommitLimit;
public int CommittedPages;
public int ContextSwitches;
public int CopyOnWriteFaults;
public int CopyReadNoWait;
public int CopyReadNoWaitMiss;
public int CopyReadWait;
public int CopyReadWaitMiss;
public int DataFlushes;
public int DataPages;
public int DemandZeroFaults;
public int FastMdlReadNotPossible;
public int FastMdlReadNoWait;
public int FastMdlReadResourceMiss;
public int FastMdlReadWait;
public int FastReadNotPossible;
public int FastReadNoWait;
public int FastReadResourceMiss;
public int FastReadWait;
public int FirstLevelTbFills;
public int FreeSystemPtes;
public long IdleTime;
public int IoOtherOperationCount;
public long IoOtherTransferCount;
public int IoReadOperationCount;
public long IoReadTransferCount;
public int IoWriteOperationCount;
public long IoWriteTransferCount;
public int LazyWriteIos;
public int LazyWritePages;
public int MapDataNoWait;
public int MapDataNoWaitMiss;
public int MapDataWait;
public int MapDataWaitMiss;
public int MappedFilePagesWritten;
public int MappedFilePageWriteIos;
public int MdlReadNoWait;
public int MdlReadNoWaitMiss;
public int MdlReadWait;
public int MdlReadWaitMiss;
public int NonPagedPoolAllocs;
public int NonPagedPoolFrees;
public int NonPagedPoolUsage;
public int PagedPoolAllocs;
public int PagedPoolFrees;
public int PagedPoolPages;
public int PagedPoolUsage;
public int PageFaults;
public int PagefilePagesWriteIos;
public int PagefilePagesWritten;
public int PagesRead;
public int PagesReadIos;
public int PeakCommitment;
public int PinMappedDataCount;
public int PinReadNoWait;
public int PinReadNoWaitMiss;
public int PinReadWait;
public int PinReadWaitMiss;
public int ReadAheadIos;
public int Reserved3;
public int SecondLevelTbFills;
public int SmallNonPagedPoolLookasideListAllocateHits;
public int SmallPagedPoolLookasideAllocateHits;
public int SystemCachePages;
public int SystemCalls;
public int SystemCodePages;
public int SystemDriverPages;
public int TotalSystemCodePages;
public int TotalSystemDriverPages;
public int TransitionFaults;
}
}