我们使用 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;
}
您知道性能更高的解决方案吗?
最佳答案
如果您想加快速度,XML 永远不是您的 friend 。幸运的是,EA API 提供了一种不同的方式来检索一组元素:Repository.GetElementSet()
,它返回 EA.Collection
的EA.Element
来自以逗号分隔的元素 ID 列表或来自 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 解析相同。但如果不出意外的话,它会更短。
关于c# - 企业架构师 - 查找原型(prototype)的所有元素的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421189/