You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML执行计划总子树成本计算函数优化:仅累加含指定属性节点

修正XML执行计划总子树成本计算函数

原函数在计算XML执行计划的总子树成本时,没考虑部分StmtSimple标签不含statementsubtreecost属性的情况,直接访问会报错,而且还有冗余逻辑。下面是修正后的实现:

原函数代码

public string CheckForGetTotalSubTreeCost(XmlDocument xdExecPlan)
{
    float totalSubtreeCost = 0;
    float subtreeCost = 0;
    int i = 0;

    XmlNodeList xnlStmtSimple = xdExecPlan.GetElementsByTagName("StmtSimple");
    XmlNode xnlStmt = xnlStmtSimple[i];
    if (xnlStmtSimple.Count > 0)
    {
        if (xnlStmt == null)
        {
            return null;
        }
        foreach (XmlNode xnlStmtt in xnlStmtSimple)
        {
            if (xnlStmtSimple != null)
            {
                subtreeCost = float.Parse(xnlStmtt.Attributes[ConstantValue.STATEMENTSUBTREECOST].Value);
                totalSubtreeCost += subtreeCost;
            }
        }
    }
    // 原函数缺失return语句,此处按业务逻辑补充返回总成本字符串
    return totalSubtreeCost.ToString();
}

修正后的函数代码

public string CheckForGetTotalSubTreeCost(XmlDocument xdExecPlan)
{
    float totalSubtreeCost = 0;
    XmlNodeList xnlStmtSimple = xdExecPlan.GetElementsByTagName("StmtSimple");

    // 节点列表为空直接返回0(或null,按需调整)
    if (xnlStmtSimple.Count == 0)
    {
        return "0";
    }

    foreach (XmlNode stmtNode in xnlStmtSimple)
    {
        // 先检查当前节点是否包含目标属性
        XmlAttribute costAttr = stmtNode.Attributes[ConstantValue.STATEMENTSUBTREECOST];
        if (costAttr != null)
        {
            // 安全解析数值,避免格式错误崩溃
            if (float.TryParse(costAttr.Value, out float subtreeCost))
            {
                totalSubtreeCost += subtreeCost;
            }
        }
    }

    return totalSubtreeCost.ToString();
}

核心修改点

  • 只处理带statementsubtreecost属性的StmtSimple节点,没属性的直接跳过
  • 用float.TryParse替代强制转换,就算属性值格式不对也不会报错
  • 删掉了没用的逻辑:比如xnlStmtSimple != null(GetElementsByTagName不会返回null),还有一开始直接取索引0的节点(列表为空时会越界)
  • 明确了节点列表为空时的返回值,补全了原函数缺失的return逻辑

内容的提问来源于stack exchange,提问作者Pranjal raut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:52:12