功能描述:服务器端获得客户端的硬件信息。绝大多数都正常,只有一种情况不正常。
特定客户端系统信息:Windows Server 2008 R2 SP1
系统类型:64位操作系统
在该客户端本机获得总内存和可用内存信息平均需要280毫秒。 但远程WCF调用需要50多秒。
经过调研在其他的客户端上都正常,上面这一种(Server 2008 R2+64位操作系统)获得内存信息特别慢,而获得其他硬件信息(比如CPU信息、光驱等)正常。感觉是WCF的问题(本机很正常,远程调用慢),不知道怎么解决,还望了解的指点一二。
WCF的绑定是netTcpBinding的,下面是绑定的配置文件
<bindings> <netTcpBinding>
<binding name="tcpBinding" receiveTimeout="24.00:00:00" transferMode="Buffered" maxReceivedMessageSize="2147483647"> <reliableSession inactivityTimeout="24.00:00:00"/>
<security mode="None">
<transport clientCredentialType="None" protectionLevel="None"/> <message clientCredentialType="None" algorithmSuite="Default"/> </security>
</binding>
</netTcpBinding></bindings>
获得内存信息的代码
Stopwatch sw = new Stopwatch();
sw.Start();
//总内存大小
ulong MemoryCapacity = 0;
//可用内存大小
ulong MemoryOccupancy = 0;
ManagementClass memoryHelper = new ManagementClass("Win32_PhysicalMemory");
ManagementObjectCollection moc = memoryHelper.GetInstances(); foreach (ManagementObject m in moc) {
MemoryCapacity = ulong.Parse(m.Properties["Capacity"].Value.ToString()) / 1024 / 1024;
}
//获取内存可用大小
memoryHelper = new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory");
moc = memoryHelper.GetInstances();
foreach (ManagementObject m in moc) {
MemoryOccupancy = ulong.Parse(m.Properties["AvailableMBytes"].Value.ToString());
}
Console.WriteLine("获取内存信息耗时(单位毫秒):"+sw.ElapsedMilliseconds); sw.Stop();
Console.ReadLine();
Smart猫小萌
呼啦一阵风
元芳怎么了
临摹微笑
茅侃侃
慕仙森
波斯汪
素胚勾勒不出你