我需要对不同的 WMI 类执行各种查询,而不是一个一个地进行查询,以提高执行速度我认为:
在 C# 或 VB.Net 中,我想知道是否可以通过一次查询来一次检索多个类的属性。
随机非函数示例:
Using wmi As New Management.ManagementObjectSearcher(
"select SerialNumber from Win32_BaseBoard, select Caption from Win32_Process"
)
...
End Using
如果是,正确的查询语法是什么?
最佳答案
这个怎么样,使用 NET 4.5:
Imports System.Management
Imports System.Collections.Concurrent
Imports System.Threading.Tasks
Dim wql As String() = {"SELECT SerialNumber FROM Win32_BaseBoard",
"SELECT Name FROM Win32_BIOS",
"SELECT VideoProcessor FROM Win32_VideoController",
"SELECT RegisteredUser FROM Win32_OperatingSystem"}
Dim tasks As New List(Of Task)
For Each q In wql
Dim t As task = Task.Run(Sub()
Dim str = WMI.GetWMIClassProperty(q)
wList.Add(str)
End Sub
)
tasks.Add(t)
Next
Task.WaitAll(tasks.ToArray)
这是 NET 4.0 版本:
Dim wmiAction As Action(Of Object) = Sub(s As Object)
Dim str = WMI.GetWMIClassProperty(s.ToString)
wList.Add(str)
End Sub
Dim tasks As New List(Of Task)
For Each q In wql
Dim t As New task(wmiAction, q)
tasks.Add(t)
t.Start()
Next
Task.WaitAll(tasks.ToArray)
WMI.GetWMIClassProperty 只是为查询创建一个搜索器并返回第一个属性或 String.Empty。
使用 秒表 连续运行 4 个需要 72-80 毫秒,将它们作为任务运行需要 15-20 毫秒(NET 4 版本慢 2-3 毫秒)。 Parallel.ForEach 的速度几乎一样快(18-25 毫秒),但似乎涉及较少但也适用于 NET 4.0:
Parallel.ForEach(wql, Sub(thisQ)
Dim str = WMI.GetWMIClassProperty(thisQ)
wList.Add(str)
End Sub)
所有四种方法在 wList 中返回相同的结果,尽管顺序不同,因此您需要一种方法来限定哪些结果是哪些。如果您查询一些非常慢的 WMI 类,差异确实会增加。
关于c# - 对多个类执行单个 WMI 查询,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626264/
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr