首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-02-29 
C#获得系统内存及开机时间的问题网上找的获得内存的代码:--------------------------privatestaticstringG

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 属性可获取此计算机上的当前本地日期和时间。



[解决办法]
我觉得Environment.TickCount这个东西是有问题的,呵呵
他最多只能表示50天不到
如果你开机大于50天了..........

http://blog.csdn.net/afxid/archive/2006/06/09/784526.aspx
看看这个可以么?

另外一个比较BT的做法是,弄个服务,开机就把时间写进注册表~~~~

热点排行