【问题标题】:Does ManagementClass load all of the properties?ManagementClass 是否加载所有属性?
【发布时间】:2018-04-12 18:29:28
【问题描述】:

使用ManagementObjectSearcher 时 - 可以搜索特定属性(而不是全部通过*)。

实例化ManagementClass(即new ManagementClass(someClass))时会发生什么情况,它会加载所有属性,还是只是某种指针,不会加载属性?

.

(我也很高兴知道将ManagementObjectSearcher* 一起使用时会发生什么,它是否会加载除属性之外的任何内容,还是就像明确指定所有属性一样?从逻辑上讲,它应该简单地表示“全部”,但从here看来不是这样。)

【问题讨论】:

标签: c# .net wmi


【解决方案1】:

实例化它时没有任何反应。它只是stores the query, scope and whatever else you may have specifiedManagementObjectSearcher 也是如此

当您致电.Get()the query is executed against the current scope 时。至于ManagementObjectSearcher,实际行为要看是不是class enumeration or instance enumeration (e.g. a query)

执行查询并直接返回结果(任何属性),而类枚举将绑定到底层 WMI 对象 without actually loading anything,直到您在某处调用 .Get()

它是加载所有属性,还是只是某种指针

这是pointerCIM Object Manager。仅在initialize is called with true 时才加载底层对象(表示您要绑定到底层 WMI 对象)。这就是执行查询的对象。

查看对Initialize() 的各种调用,乍一看似乎只有在您请求属性或限定符时才绑定对象。调用方法不会绑定它们。

我也很高兴知道将 ManagementObjectSearcher 与 * 一起使用时会发生什么

在您执行查询之前什么都没有。默认情况下,对对象执行shallow enumeration。除了属性之外,这可能还会返回限定符,但我对此并不完全确定。

也很有趣(包括同级文章):https://technet.microsoft.com/en-us/library/cc180561.aspx

我希望这会有所帮助:)

【讨论】:

  • 因此使用ManagementClass.InvokeMethod 只会调用该方法,而不会浪费资源访问属性。我没听错吗?
  • 至于ManagementObjectSearcher with a * - 是的,我的意思是当Get 被调用时会发生什么。根据我在another question of mine 中的描述,看起来获得方法的唯一方法是要求*,这似乎不仅仅返回所有属性。这似乎不合逻辑。
  • InvokeMethod 本身只是连接到 ManagementScope 并获取对基础 WMI 对象的引用。当然,您检索类的方式可能会或可能不会获得所有内容。如果您想尽可能提高效率,我认为ManagementObjectSearcher 不会对您有太大帮助。使用new ManagementClass("Name_Of_Class")
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2015-11-12
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多