WMI性能查询

时间:2011-05-12 11:30:37

标签: wmi biztalk wql

我遇到WMI查询问题。 我使用WMI查询来搜索和恢复BizTalk中的实例。 当没有那么多实例时(所以当数据不是那么多时),查询执行得非常好。 但是当数据很大(大约3000个实例)时,查询大约需要6到10秒才能执行,这是不能容忍的。

代码如下:

string query = "SELECT * FROM MSBTS_ServiceInstance WHERE InstanceID = \"" + OrchestrationId + "\"";
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ManagementScope(@"root\MicrosoftBizTalkServer"), new WqlObjectQuery(query), null);
    int count = searcher.Get().Count;
    if (count > 0)
    {
        string[] strArray = new string[count];
        string[] strArray2 = new string[count];
        string[] strArray3 = new string[count];
        string str2 = string.Empty;
        string str3 = string.Empty;
        int index = 0;
        foreach (ManagementObject obj2 in searcher.Get())
        {
            if (str2 == string.Empty)
            {
                str2 = obj2["HostName"].ToString();
            }
            strArray2[index] = obj2["ServiceClassId"].ToString();
            strArray3[index] = obj2["ServiceTypeId"].ToString();
            strArray[index] = obj2["InstanceID"].ToString();
            str3 = str3 + string.Format("  {0}\n", obj2["InstanceID"].ToString());
            index++;
        }
        new ManagementObject(string.Format("root\\MicrosoftBizTalkServer:MSBTS_HostQueue.HostName=\"{0}\"", str2)).InvokeMethod("ResumeServiceInstancesByID", new object[] { strArray2, strArray3, strArray, 1 });

这是te数据越来越大的第一个查询(从MSBS_ServiceInstance中选择*)。

我有什么想法可以改善这个? 该平台是Windows Server 2008 Enterprise ..

THX!

2 个答案:

答案 0 :(得分:2)

看起来您正在为您的业务流程获取所有服务实例,而不仅仅是已暂停的服务实例。

尝试将以下内容添加到查询的where子句中,以便仅返回暂停和暂停不可恢复的服务实例:

and (ServiceStatus = 4 or ServiceStatus = 16)

答案 1 :(得分:0)

感谢您的回复。 我得到那么多被暂停的实例的原因有时是设计的。 每当消息不按顺序排列时,业务流程将暂停,直到上一条消息通过。 我找到了另一种使用随BizTalk安装的BizTalkOperations类恢复实例的方法:

BizTalkOperations operations = new BizTalkOperations(dataSource, initialCatalog);

foreach (Guid id in instanceIds)
{
     operations.ResumeInstance(id);
}

此代码比WMI代码(和更少的代码^^)更高效:)

由于