C#通过WinAPI获取内存信息,32位64位可用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleGetSysMemory
{
class Program
{
[StructLayout(LayoutKind.Sequential)]
public struct MEMORYSTATUSEX
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys; //可用物理内存
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
}
[DllImport("kernel32.dll")]
public static extern void GlobalMemoryStatusEx(ref MEMORYSTATUSEX stat);
static void Main(string[] args)
{
string msg = "物理内存总数:{1}Mb{0}可用物理内存:{2}Mb{0}虚拟内存总数:{3}Mb{0}可用虚拟内存:{4}Mb";
MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
memInfo.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
GlobalMemoryStatusEx(ref memInfo);
Console.WriteLine(string.Format(msg,
Environment.NewLine,
memInfo.ullTotalPhys / 1024 / 1024,
memInfo.ullAvailPhys / 1024 / 1024,
memInfo.ullTotalVirtual / 1024 / 1024,
memInfo.ullAvailVirtual / 1024 / 1024));
Console.ReadKey();
}
}
}
也可以用另一个API GlobalMemoryStatus获取上述信息,但该方法参数长度在32位和64位系统下不同,如定义错误拿不到正确值,如下:
32位系统
[StructLayout(LayoutKind.Sequential)]
public struct MemoryStatus
{
public uint Length;
public uint MemoryLoad;
public uint TotalPhysical;
public uint AvailablePhysical;//可用物理内存
public uint TotalPageFile;
public uint AvailablePageFile;
public uint TotalVirtual;
public uint AvailableVirtual;
}
MemoryStatus memStatus = new MemoryStatus();
memStatus.Length = (uint)Marshal.SizeOf(typeof(MemoryStatus));
GlobalMemoryStatus(ref memStatus);
Console.WriteLine(string.Format(msg,
Environment.NewLine,
memStatus.TotalPhysical / 1024 / 1024,
memStatus.AvailablePhysical / 1024 / 1024,
memStatus.TotalVirtual / 1024 / 1024,
memStatus.AvailableVirtual / 1024 / 1024));
64位系统
[StructLayout(LayoutKind.Sequential)]
public struct MemoryStatus
{
public uint Length;
public uint MemoryLoad;
public ulong TotalPhysical;
public ulong AvailablePhysical;//可用物理内存
public ulong TotalPageFile;
public ulong AvailablePageFile;
public ulong TotalVirtual;
public ulong AvailableVirtual;
}
MemoryStatus memStatus = new MemoryStatus();
memStatus.Length = (uint)Marshal.SizeOf(typeof(MemoryStatus));
GlobalMemoryStatus(ref memStatus);
Console.WriteLine(string.Format(msg,
Environment.NewLine,
(long)memStatus.TotalPhysical / 1024 / 1024,
(long)memStatus.AvailablePhysical / 1024 / 1024,
(long)memStatus.TotalVirtual / 1024 / 1024,
(long)memStatus.AvailableVirtual / 1024 / 1024));
C#通过WinAPI获取内存信息,32位64位可用的更多相关文章
- C#获取操作系统是32位或64位的代码
注意需添加引用System.Management) public static string Distinguish64or32System() { try { string addressWidth ...
- Android 获取内存信息
由于工作需要,研究了一下android上获取内存信息的方法,总结如下: 1.SDK获取 在Java层利用API获取很简单,直接使用ActivityManager.MemoryInfo类即可,代码如下: ...
- linux通过脚本获取内存信息
1 原理 脚本中通过执行free获取内存信息,然后将文本信息通过“空格”分隔符分割成字符串数组将不同信息提取出来,最后通过bc计算出百分比 2 脚本 #!/bin/shHOSTNAME=`hostna ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)
阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑【转发】
原文地址:http://www.cnblogs.com/hbccdf/archive/2014/03/09/3590916.html 自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问 ...
- Windbg 调试工具32位/64位版本下载
最新的Windbg调试工具32位/64位版本越来越不好下载了,这里通过CSDN的渠道给大家一个下载地址,帮助大家更好下载工具: https://github.com/EasyDarwin/Tools/ ...
- [转载]使用32位64位交叉编码混淆来打败静态和动态分析工具 - wildsator
0×00 摘要 混淆是一种能增加二进制分析和逆向工程难度与成本的常用技术.主流的混淆技术都是着眼于使用与目标CPU相同的机器代码,在相同的处理器模式下,隐藏代码并进行控制.本文中引入了一种新的混淆方法 ...
- 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动
由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...
随机推荐
- Codeforces 631C
题意:给定n和m. 给定一个长度为n的序列,m次操作. 接下来m次操作,每行第一个数若为1,则增序排列,若为2则降序排列,第二个数是排列的范围,即从第一个数排序到第某个数. 思路: 首先,对于其中范围 ...
- (easy)LeetCode 191.Number of 1 Bits
Number of 1 Bits Write a function that takes an unsigned integer and returns the number of ’1' bits ...
- 如何隐藏storyboard中的top bar
在navigation bar中是没有设置它的隐藏和显示的属性的 那么究竟在什么地方呢,当在它自身的属性中没有找到的情况下,那么就只能去包含它的容器中去寻找了,结果果然找到了.在view的第四个选择器 ...
- Java中1000==1000为false而100==100为true
public static void main(String[] args) { int z1 = 0; int z2 = 0; System.out.println(z1==z2);//TRUE I ...
- linux包转发开发
28号晚上接到这个任务的, 看了点epoll, 29号上午安装Ubuntu 12.10的G++, 开始把内网的vm虚拟机文件, 复制到外网, 重新建立一个虚拟机再更新, 最后外网也没能安装得了g++. ...
- MFC学习 标签页与属性页及各常用控件使用
参考 http://blog.csdn.net/anye3000/article/details/6700023 CTabCtrl: BOOL CTabTestDlg::OnInitDialog() ...
- 【练习】sqlnet.ora
在SQLNET.ora文件中设置以下参数可以实现IP访问限制: $ pwd/u01/app/oracle/product/10.2.0/db_1/network/admin$ vi sqlnet.or ...
- IOS thread1:exc_bad)access(code=exc_1386_gpflt)错误
这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题: 在Xcode的菜单: Product->Scheme->Edi ...
- MSP430F149学习之路——时钟1
1.看门狗产生方波 #include <msp430x14x.h> void main() { WDTCTL = WDT_MDLY_32; IE1 |= WDTIE; P1DIR |= B ...
- TCP/IP详解学习笔记(10)-- DNS:域名系统
1.DNS DNS 是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的.域名服务器是指保存有该网络中 ...