哈咯各位,这两天碰到一个问题,就是用C#编程读取硬件信息,读到的内存总额时出错,显示为零K;硬件信息为2条2G内存,OS为Windows 2003,请问一下谁碰到类型的问题,有啥好的解决办法?

解决方案 »

  1.   


      /// <summary>
        /// 定义内存的信息结构
        /// <code>
        /// LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序,注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
        /// LayoutKind.Explicit:对每个域按照FieldOffset属性对类型成员排序
        /// LayoutKind.Sequential:对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
        /// </code>
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        public struct MemoryInfo
        {
            /// <summary>
            /// 
            /// </summary>
            public uint dwLength;        /// <summary>
            /// 已经使用的内存
            /// </summary>
            public uint dwMemoryLoad;        /// <summary>
            /// 总物理内存大小
            /// </summary>
            public uint dwTotalPhys;        /// <summary>
            /// 可用物理内存大小
            /// </summary>
            public uint dwAvailPhys;        /// <summary>
            /// 交换文件总大小
            /// </summary>
            public uint dwTotalPageFile;        /// <summary>
            /// 可用交换文件大小
            /// </summary>
            public uint dwAvailPageFile;        /// <summary>
            /// 总虚拟内存大小
            /// </summary>
            public uint dwTotalVirtual;        /// <summary>
            /// 可用虚拟内存大小
            /// </summary>
            public uint dwAvailVirtual;
        }    class HelloMemory
        {
            /// <summary>
            /// 获取内存使用状态的API方法
            /// </summary>
            /// <param name="memInfo"></param>
            [DllImport("kernel32")]
            private static extern void GlobalMemoryStatus(ref MemoryInfo memInfo);        static void Main(string[] args)
            {
                MemoryInfo mi = new MemoryInfo();
                GlobalMemoryStatus(ref mi);            Console.WriteLine(string.Format("虚拟内存共计 = {0} K", mi.dwTotalVirtual / 1024));
                Console.WriteLine(string.Format("虚拟内存已用 = {0} K", (mi.dwTotalVirtual - mi.dwAvailVirtual) / 1024));
                Console.WriteLine(string.Format("虚拟内存可用 = {0} K", mi.dwAvailVirtual / 1024));            Console.WriteLine(string.Format("物理内存共计 = {0} K", mi.dwTotalPhys / 1024));
                Console.WriteLine(string.Format("物理内存已用 = {0} K", (mi.dwTotalPhys - mi.dwAvailPhys) / 1024));
                Console.WriteLine(string.Format("物理内存可用 = {0} K", mi.dwAvailPhys / 1024));            Console.ReadKey();
            }
        }