【发布时间】:2012-03-08 00:00:38
【问题描述】:
在使用 MVVM 和 Prism 时,我发现自己做了很多转换,因为大多数参数都是接口
前
public void AddCrSubSystemsToPlant(IPlantItem plantItm, CRArticleItem crItm)
{
OSiteSubSystem itm = (OSiteSubSystem)crItm;
itm.PartData.Order = ((OSiteEquipment)plantItm).SubSystems.Count() + 1;
((OSiteEquipment)plantItm).SubSystems.Add(itm);
}
或
public void DeletePart(IPlantItem plantItem)
{
IEnumerable<IPlantItem> itmParent = GetParentPartByObjectId(_siteDocument, plantItem);
if (plantItem is OSiteEquipment)
((ObservableCollection<OSiteEquipment>)itmParent).Remove((OSiteEquipment)plantItem);
if (plantItem is OSiteSubSystem)
((ObservableCollection<OSiteSubSystem>)itmParent).Remove((OSiteSubSystem)plantItem);
if (plantItem is OSiteComponent)
((ObservableCollection<OSiteComponent>)itmParent).Remove((OSiteComponent)plantItem);
}
我的问题是,所涉及的费用是多少。如果避免这些操作,这些操作是否会占用大量内存或 CPU。
有什么意见吗?
【问题讨论】:
-
为什么需要所有这些演员表?您的接口不公开所需的操作吗?如果没有,为什么不呢?
-
你可以模拟一些有和没有强制转换的测试用例并测量性能。我不认为任何单独的演员都会对表演产生很大影响,但这取决于你这样做的频率。
-
考虑使用
as关键字作为强制转换不会抛出异常,而是返回null。 -
您还可以通过使用“as”而不是“is”,然后检查 null 来删除第二个代码 sn-p 中的重复强制转换。当然,由于您要检查多种类型,我不确定这是否真的会提供更好的性能。 [编辑:ja72 打败了我!]