专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C#获得总物理内存和可用物理内存大小几个函数

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:48:37       共计:3641 浏览
说明

网上关于C#获取总物理内存大小和当前可用物理内存大小的方法有很多,但是多是从国外某网站抄过来,不仅没有测评和验证,甚至连代码排版都是乱七八糟。就C#内存操作的方法,本文对这些进行了一些测试,并从中选择了比较好的一种实现方式进行了实现和代码重写,并对实现后的源代码后进行了测试。
实现原理

基于 System.Memanement.ManagementClass 实现。这个类是对硬件信息WMI的具体封装,具体相关内容可以参见 Windows Management Instrumentation。
函数说明

    long GetTotalPhysicalMemory()
    用于获得当前总物理内存大小,单位是字节。如果获取失败,返回 -1。
    long GetAvailablePhysicalMemory()
    用于获得当前可用物理内存大小,单位是字节。如果获取失败,返回 -1。
    double ToFileFormat(long filesize, [FileSizeUnit unit])
    根据指定的文件大小和单位,对输入的文件大小(字节表示)进行转换。单位是可选参数,默认值为FileSizeUnit.MB。

使用方法

    把函数的源代码复制至实际的项目;
    在引用中添加系统自带的 System.Memanement 类库;
    在函数定义的类文件顶部添加 using System.Memagement。

示例

static void Main()
{
    long total = GetTotalPhysicalMemory();
    long free = GetAvailablePhysicalMemory();
    long used = total - free;

    Console.WriteLine("Total memory: {0} bytes, {1} GB.", total, ToFileFormat(total, FileSizeUnit.GB).ToString("0.00"));
    Console.WriteLine("Used memory: {0} bytes, {1} MB.", used, ToFileFormat(used).ToString("0.00"));
    Console.WriteLine("Free memory: {0} bytes, {1} KB.", free, ToFileFormat(free, FileSizeUnit.KB).ToString("0.00"));
}

   

输出结果

Total memory: 8589934592 bytes, 8.00 GB.
Used memory: 5817077760 bytes, 5547.60 MB.
Free memory: 2772856832 bytes, 2707868.00 KB.

   
附:实现源代码

        /// <summary>
        /// 获得已使用的物理内存的大小,单位 (Byte),如果获取失败,返回 -1.
        /// </summary>
        /// <returns></returns>
        public static long GetTotalPhysicalMemory()
        {
            long capacity = 0;
            try
            {
                foreach (ManagementObject mo1 in new ManagementClass("Win32_PhysicalMemory").GetInstances())
                    capacity += long.Parse(mo1.Properties["Capacity"].Value.ToString());
            }
            catch (Exception ex)
            {
                capacity = -1;
                Console.WriteLine(ex.Message);
            }
            return capacity;
        }


        /// <summary>
        /// 获得已使用的物理内存的大小,单位 (Byte),如果获取失败,返回 -1.
        /// </summary>
        /// <returns></returns>
        public static long GetAvailablePhysicalMemory()
        {
            long capacity = 0;
            try
            {
                foreach (ManagementObject mo1 in new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory").GetInstances())
                    capacity += long.Parse(mo1.Properties["AvailableBytes"].Value.ToString());
            }
            catch (Exception ex)
            {
                capacity = -1;
                Console.WriteLine(ex.Message);
            }
            return capacity;
        }
        
        /// <summary>
        /// 根据指定的文件大小单位,对输入的文件大小(字节表示)进行转换。
        /// </summary>
        /// <param name="filesize">文件文件大小,单位为字节。</param>
        /// <param name="targetUnit">目标单位。</param>
        /// <returns></returns>
        public static double ToFileFormat(long filesize, FileSizeUnit targetUnit = FileSizeUnit.MB)
        {
            double size = -1;
            switch (targetUnit)
            {
                case FileSizeUnit.KB: size = filesize / 1024.0; break;
                case FileSizeUnit.MB: size = filesize / 1024.0 / 1024; break;
                case FileSizeUnit.GB: size = filesize / 1024.0 / 1024 / 1024; break;
                case FileSizeUnit.TB: size = filesize / 1024.0 / 1024 / 1024 / 1024; break;
                case FileSizeUnit.PB: size = filesize / 1024.0 / 1024 / 1024 / 1024 / 1024; break;
                default: size = filesize; break;
            }
            return size;
        }
    }

   

文件单位大小的枚举型。


    /// <summary>
    /// 文件大小单位,包括从B至PB共六个单位。
    /// </summary>
    public enum FileSizeUnit
    {
        B,
        KB,
        MB,
        GB,
        TB,
        PB
    }
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:苹果手机safari中input的button按钮颜色显示以及默认样式问题 | ·下一条:C#中的Process类使用

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有