Enterprise Architect - 查找刻板印象的所有元素的最快方法

时间:2014-08-21 08:04:22

标签: c# enterprise-architect

我们在C#中使用一个方法来确定构造型的所有元素,但这非常慢:

    public List<EA.Element> findElementsByStereotype(string stereotype){
        List<EA.Element> result = new List<EA.Element>();
        String xmlQueryResult = repository.SQLQuery(
                                        "select obj1.object_id " +
                                        "from t_object obj1 " +
                                        "where obj1.stereotype = '" + stereotype + "';");
        XmlDocument xml = Tools.XMLUtil.convertStringToXMLDocument(xmlQueryResult);
        XmlNodeList xnList = xml.SelectNodes("/EADATA/Dataset_0/Data/Row");
        foreach (XmlNode xn in xnList){
            result.Add(repository.GetElementByID(Convert.ToInt32(xn.InnerText)));
        }
        return result;
    }

你知道一个更高效的解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果你想快点,XML永远不是你的朋友。幸运的是,EA API提供了一种不同的方法来检索一组元素:Repository.GetElementSet(),它从逗号分隔的元素ID列表中返回EA.Collection EA.Element个,或者从一个SQL查询。

public List<EA.Element> findElementsByStereotype(string stereotype) {
    List<EA.Element> result = new List<EA.Element>();
    foreach (EA.Element element in repository.GetElementSet("select Object_ID " +
             "from t_object where Stereotype='" + stereotype + "'", 2)) {
        result.Add(element);
    }
    return result;
}

请注意,我尚未确认此版本运行速度更快。我假设它会,但GetElementSet()可能与您正在进行的基本相同的XML解析。但如果没别的话,那就更短了。