Browse Source

改进硬件信息的获取方式

懒得勤快 4 years ago
parent
commit
0187bf3f0b

+ 58 - 35
Masuit.Tools.Abstractions/Hardware/SystemInfo.cs

@@ -61,9 +61,12 @@ namespace Masuit.Tools.Hardware
                 using var moc = mc.GetInstances();
                 foreach (var mo in moc)
                 {
-                    if (mo["TotalPhysicalMemory"] != null)
+                    using (mo)
                     {
-                        PhysicalMemory = long.Parse(mo["TotalPhysicalMemory"].ToString());
+                        if (mo["TotalPhysicalMemory"] != null)
+                        {
+                            PhysicalMemory = long.Parse(mo["TotalPhysicalMemory"].ToString());
+                        }
                     }
                 }
 
@@ -118,12 +121,16 @@ namespace Masuit.Tools.Hardware
             {
                 try
                 {
-                    using var mos = new ManagementClass("Win32_OperatingSystem");
-                    foreach (var mo in mos.GetInstances())
+                    using var mc = new ManagementClass("Win32_OperatingSystem");
+                    using var moc = mc.GetInstances();
+                    foreach (var mo in moc)
                     {
-                        if (mo["FreePhysicalMemory"] != null)
+                        using (mo)
                         {
-                            return 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
+                            if (mo["FreePhysicalMemory"] != null)
+                            {
+                                return 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
+                            }
                         }
                     }
 
@@ -195,8 +202,8 @@ namespace Masuit.Tools.Hardware
             try
             {
                 using var m = new ManagementClass("Win32_Processor");
-                using var mn = m.GetInstances();
-                return mn.Count;
+                using var moc = m.GetInstances();
+                return moc.Count;
             }
             catch (Exception)
             {
@@ -208,7 +215,12 @@ namespace Masuit.Tools.Hardware
 
         #region 获取CPU信息
 
-        private static List<ManagementBaseObject> _cpuObjects;
+        private static readonly Lazy<List<ManagementBaseObject>> CpuObjects = new Lazy<List<ManagementBaseObject>>(() =>
+        {
+            using var mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
+            using var moc = mos.Get();
+            return moc.AsParallel().Cast<ManagementBaseObject>().ToList();
+        });
 
         /// <summary>
         /// 获取CPU信息
@@ -218,10 +230,7 @@ namespace Masuit.Tools.Hardware
         {
             try
             {
-                using var mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
-                using var moc = mos.Get();
-                _cpuObjects ??= moc.AsParallel().Cast<ManagementBaseObject>().ToList();
-                return _cpuObjects.Select(mo => new CpuInfo
+                return CpuObjects.Value.Select(mo => new CpuInfo
                 {
                     CpuLoad = CpuLoad,
                     NumberOfLogicalProcessors = ProcessorCount,
@@ -252,7 +261,7 @@ namespace Masuit.Tools.Hardware
         /// <returns>内存信息</returns>
         public static RamInfo GetRamInfo()
         {
-            var info = new RamInfo
+            return new RamInfo
             {
                 MemoryAvailable = GetFreePhysicalMemory(),
                 PhysicalMemory = GetTotalPhysicalMemory(),
@@ -261,7 +270,6 @@ namespace Masuit.Tools.Hardware
                 AvailableVirtual = 1 - GetUsageVirtualMemory(),
                 TotalVirtual = 1 - GetUsedPhysicalMemory()
             };
-            return info;
         }
 
         #endregion
@@ -276,22 +284,24 @@ namespace Masuit.Tools.Hardware
         {
             try
             {
-                string str = "";
                 using var mos = new ManagementObjectSearcher(@"root\WMI", "select * from MSAcpi_ThermalZoneTemperature");
-                var moc = mos.Get();
+                using var moc = mos.Get();
                 foreach (var mo in moc)
                 {
-                    str += mo.Properties["CurrentTemperature"].Value.ToString();
+                    using (mo)
+                    {
+                        //这就是CPU的温度了
+                        var temp = (float.Parse(mo.Properties["CurrentTemperature"].Value.ToString()) - 2732) / 10;
+                        return (float)Math.Round(temp, 2);
+                    }
                 }
-
-                //这就是CPU的温度了
-                float temp = (float.Parse(str) - 2732) / 10;
-                return (float)Math.Round(temp, 2);
             }
             catch (Exception)
             {
                 return 0;
             }
+
+            return 0;
         }
 
         #endregion
@@ -469,9 +479,12 @@ namespace Masuit.Tools.Hardware
                 using var moc = mc.GetInstances();
                 foreach (var mo in moc)
                 {
-                    if ((bool)mo["IPEnabled"])
+                    using (mo)
                     {
-                        list.Add(mo["MacAddress"].ToString());
+                        if ((bool)mo["IPEnabled"])
+                        {
+                            list.Add(mo["MacAddress"].ToString());
+                        }
                     }
                 }
 
@@ -534,9 +547,13 @@ namespace Masuit.Tools.Hardware
         {
             var query = new SelectQuery("SELECT LastBootUpTime FROM Win32_OperatingSystem WHERE Primary='true'");
             using var searcher = new ManagementObjectSearcher(query);
-            foreach (var mo in searcher.Get())
+            using var moc = searcher.Get();
+            foreach (var mo in moc)
             {
-                return ManagementDateTimeConverter.ToDateTime(mo.Properties["LastBootUpTime"].Value.ToString());
+                using (mo)
+                {
+                    return ManagementDateTimeConverter.ToDateTime(mo.Properties["LastBootUpTime"].Value.ToString());
+                }
             }
 
             return DateTime.Now - TimeSpan.FromMilliseconds(Environment.TickCount & int.MaxValue);
@@ -551,18 +568,21 @@ namespace Masuit.Tools.Hardware
         {
             try
             {
-                string str = null;
                 var mos = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem");
-                foreach (var mo in mos.Get())
+                using var moc = mos.Get();
+                foreach (var mo in moc)
                 {
-                    str = mo[type].ToString();
+                    using (mo)
+                    {
+                        return mo[type].ToString();
+                    }
                 }
-                return str;
             }
             catch (Exception e)
             {
                 return "未能获取到当前计算机系统信息,可能是当前程序无管理员权限,如果是web应用程序,请将应用程序池的高级设置中的进程模型下的标识设置为:LocalSystem;如果是普通桌面应用程序,请提升管理员权限后再操作。异常信息:" + e.Message;
             }
+            return string.Empty;
         }
 
         #endregion
@@ -599,12 +619,15 @@ namespace Masuit.Tools.Hardware
                 using var moc = mc.GetInstances();
                 foreach (var mo in moc)
                 {
-                    DiskInfos.Add(new DiskInfo()
+                    using (mo)
                     {
-                        Total = float.Parse(mo["Size"].ToString()),
-                        Model = mo["Model"].ToString(),
-                        SerialNumber = mo["SerialNumber"].ToString(),
-                    });
+                        DiskInfos.Add(new DiskInfo()
+                        {
+                            Total = float.Parse(mo["Size"].ToString()),
+                            Model = mo["Model"].ToString(),
+                            SerialNumber = mo["SerialNumber"].ToString(),
+                        });
+                    }
                 }
 
                 return DiskInfos;

+ 4 - 4
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -4,7 +4,7 @@
     <LangVersion>latest</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.3.8</Version>
+    <Version>2.4.3.9</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -17,9 +17,9 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.4.3.8</FileVersion>
+    <FileVersion>2.4.3.9</FileVersion>
     <Company>ldqk.org</Company>
-    <AssemblyVersion>2.4.3.8</AssemblyVersion>
+    <AssemblyVersion>2.4.3.9</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>
@@ -42,7 +42,7 @@
 
   <ItemGroup>
     <PackageReference Include="DnsClient" Version="1.5.0" />
-    <PackageReference Include="HtmlSanitizer" Version="5.0.404" />
+    <PackageReference Include="HtmlSanitizer" Version="6.0.437" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
     <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />

+ 1 - 1
Masuit.Tools.Abstractions/Reflection/ReflectionUtil.cs

@@ -447,7 +447,7 @@ namespace Masuit.Tools.Reflection
                 };
 
                 Type[] constructorArgumentTypes = argumentTypes.Where(t => t != typeof(TypeToIgnore)).ToArray();
-                var constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, CallingConventions.HasThis, constructorArgumentTypes, Array.Empty<ParameterModifier>());
+                var constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, CallingConventions.HasThis, constructorArgumentTypes, new ParameterModifier[0]);
 
                 var lamdaParameterExpressions = new[]
                 {

+ 20 - 21
Masuit.Tools.Abstractions/Win32/Windows.cs

@@ -244,17 +244,17 @@ namespace Masuit.Tools.Win32
             try
             {
                 //获取硬盘ID
-                string hdid = Empty;
                 using var mc = new ManagementClass("Win32_DiskDrive");
-                foreach (ManagementObject mo in mc.GetInstances())
+                using var moc = mc.GetInstances();
+                foreach (ManagementObject o in moc)
                 {
-                    using (mo)
+                    using (o)
                     {
-                        hdid = (string)mo.Properties["Model"].Value;
+                        return (string)o.Properties["Model"].Value;
                     }
                 }
 
-                return hdid;
+                return Empty;
             }
             catch
             {
@@ -270,17 +270,17 @@ namespace Masuit.Tools.Win32
         {
             try
             {
-                string st = Empty;
                 using var mc = new ManagementClass("Win32_ComputerSystem");
-                foreach (ManagementObject mo in mc.GetInstances())
+                using var moc = mc.GetInstances();
+                foreach (ManagementObject o in moc)
                 {
-                    using (mo)
+                    using (o)
                     {
-                        st = mo["UserName"].ToString();
+                        return o["UserName"].ToString();
                     }
                 }
 
-                return st;
+                return Empty;
             }
             catch
             {
@@ -292,18 +292,17 @@ namespace Masuit.Tools.Win32
         {
             try
             {
-                string st = Empty;
                 using var mc = new ManagementClass("Win32_ComputerSystem");
-                foreach (var o in mc.GetInstances())
+                using var moc = mc.GetInstances();
+                foreach (ManagementObject o in moc)
                 {
                     using (o)
                     {
-                        var mo = (ManagementObject)o;
-                        st = mo["SystemType"].ToString();
+                        return o["SystemType"].ToString();
                     }
                 }
 
-                return st;
+                return Empty;
             }
             catch
             {
@@ -315,17 +314,17 @@ namespace Masuit.Tools.Win32
         {
             try
             {
-                string st = Empty;
                 using var mc = new ManagementClass("Win32_ComputerSystem");
                 using var moc = mc.GetInstances();
-                foreach (var o in moc)
+                foreach (ManagementObject o in moc)
                 {
-                    var mo = (ManagementObject)o;
-
-                    st = mo["TotalPhysicalMemory"].ToString();
+                    using (o)
+                    {
+                        return o["TotalPhysicalMemory"].ToString();
+                    }
                 }
 
-                return st;
+                return Empty;
             }
             catch
             {

+ 4 - 4
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -18,10 +18,10 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.3.8</Version>
-        <FileVersion>2.4.3.8</FileVersion>
+        <Version>2.4.3.9</Version>
+        <FileVersion>2.4.3.9</FileVersion>
         <Company>ldqk.org</Company>
-        <AssemblyVersion>2.4.3.8</AssemblyVersion>
+        <AssemblyVersion>2.4.3.9</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -31,7 +31,7 @@ github:https://github.com/ldqk/Masuit.Tools
 
     <ItemGroup>
         <PackageReference Include="DnsClient" Version="1.5.0" />
-        <PackageReference Include="HtmlSanitizer" Version="5.0.404" />
+        <PackageReference Include="HtmlSanitizer" Version="6.0.437" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0" />
         <PackageReference Include="Microsoft.Extensions.Http" Version="5.0" />

BIN
Masuit.Tools.Net45/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net45</id>
     <!--*-->
-    <version>2.4.3.8</version>
+    <version>2.4.3.9</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -38,7 +38,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MongoDB.Driver" Version="2.13.0" />
+    <PackageReference Include="MongoDB.Driver" Version="2.13.1" />
   </ItemGroup>
 
 </Project>

+ 1 - 1
Masuit.Tools/Masuit.Tools.csproj

@@ -160,7 +160,7 @@
       <Version>1.5.0</Version>
     </PackageReference>
     <PackageReference Include="HtmlSanitizer">
-      <Version>5.0.404</Version>
+      <Version>6.0.437</Version>
     </PackageReference>
     <PackageReference Include="Microsoft.AspNet.Mvc">
       <Version>5.2.7</Version>

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.4.3.8</version>
+    <version>2.4.3.9</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>