代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C#

C#获得系统内存及开机时间的有关问题

发布时间:2019-08-17浏览(818)

    C#获得系统内存及开机时间的问题
    网上找的获得内存的代码:
    --------------------------
    private   static   string   GetPhisicalMemory()
    {
    ManagementObjectSearcher   searcher   =   new   ManagementObjectSearcher();   //用于查询一些如系统信息的管理对象
    searcher.Query   =   new   SelectQuery( "Win32_PhysicalMemory ",   " ",   new   string[]   {   "Capacity "   });//设置查询条件
    ManagementObjectCollection   collection   =   searcher.Get();   //获取内存容量
    ManagementObjectCollection.ManagementObjectEnumerator   em   =   collection.GetEnumerator();

    int   capacity   =   0;
    while   (em.MoveNext())
    {
    ManagementBaseObject   baseObj   =   em.Current;
    if   (baseObj.Properties[ "Capacity "].Value   !=   null)
    {
    try
    {
    capacity   +=   int.Parse(baseObj.Properties[ "Capacity "].Value.ToString());
    }
    catch
    {
    return   " ";
    }
    }
    }
    return   (capacity/1024/1024).ToString();
    }
    --------------------------
    获得系统启动时间:
    --------------------------
    TimeSpan   m_WorkTimeTemp   =   new   TimeSpan(Convert.ToInt64(Environment.TickCount)   *   10000);
    string   m_WorkTime   =   m_WorkTimeTemp.Days   +   "天 "   +   m_WorkTimeTemp.Hours   +   "小时 "   +   m_WorkTimeTemp.Minutes   +   "分钟 "   +   m_WorkTimeTemp.Seconds   +   "秒 ";
    --------------------------
    问题:
    --------------------------
    我在我的机器上(vista   iis7)上面显示的为:
    #   内存:1024   MB  
    #   开机时间:0天20小时34分钟55秒  
    正常

    但是在服务器上(win2003   iis6,内存2G)显示为:
    #   内存:-2048   MB  
    #   开机时间:-6天-9小时-32分钟-25秒  
    内存显示为负数,开机时间为43天多,错误如上。。

    请问这是为啥?

    ------解决方案--------------------
    关于开机时间
    看MSDN
    // Sample for the Environment.TickCount property.

    // TickCount cycles between Int32.MinValue, which is a negative
    // number, and Int32.MaxValue once every 49.8 days. This sample
    // removes the sign bit to yield a nonnegative number that cycles
    // between zero and Int32.MaxValue once every 24.9 days.

    using System;

    class Sample
    {
    public static void Main()
    {
    int result = Environment.TickCount & Int32.MaxValue;
    Console.WriteLine( "TickCount: {0} ", result);
    }
    }
    /*
    This example produces the following results:

    TickCount: 101931139
    */

    你开机时间是不是太长了~~~
    ------解决方案--------------------
    int 类型的范围最大是 2G-1, 2G 内存已经超过范围,所以显示为-2048一点不奇怪

    ------解决方案--------------------
    那些抢分的都归隐了~~~~
    呵呵

    计算这些东西最好不要使用int
    ------解决方案--------------------
    这是微软的帮助:TickCount最高只能获取到 49.8 天
    备注
    该属性的值从系统计时器派生,并以 32 位有符号整数的形式存储。因此,如果系统连续运行,TickCount 将在约 24.9 天内从零递增至 Int32.MaxValue,然后跳至 Int32.MinValue(这是一个负数),再在接下来的 24.9 天内递增至零。

    TickCount 属性的分辨率不能小于 500 毫秒。

    TickCount 不同于 Ticks 属性,后者是自 1/1/0001 中午 12:00 以后经过的 100 毫微秒间隔数。

    使用 DateTime.Now 属性可获取此计算机上的当前本地日期和时间。