我有几个类将计算成员暴露给 UI。我正在尝试优化,以便读数仅在需要时获得新值。
例如,我有一个可以容纳物品的容器。项目有 UnitMass、UnitSize、UnitCount 等。项目还计算它们的 TotalMass (UnitMass x UnitCount)、TotalSize 等。容器通过对其内容的各个成员求和来计算它们的 TotalContentMass、TotalContentSize 等。
容器所有者可能随时都可以看到一百个容器的 TotalContentMass 等读数。任何容器读取的任何数字都可能每秒变化 30 倍,或者可能连续数小时保持不变。
[容器 1] TotalContentMass:218 | 可用质量:1991 [项目 1] 单位:5 | 总质量:50 [项目 2] 单位:3 | 总质量:96 ... [容器 2] TotalContentMass:944 | 可用质量:53 [项目 1] 单位:12 | 总质量:16 [项目2] 单位:21 | 总质量:488 ... ...
所以对于这些类型的“TotalX”成员,我想我应该有一个字段来存储计算的 ToString 结果,并将该字符串用于大多数 UI 目的。我会依靠事件处理来保持字符串更新。
class Item
{
int _unitCount;
int _unitMass;
string _totalMassText;
int _unitSize;
string _totalSizeText;
...
public TotalMass { get { return _unitMass * _unitCount; } }
public TotalMassText { get { return _totalMassText; } }
public TotalSize { get { return _unitSize * _unitCount; } }
public TotalSizeText { get { return _totalSizeText; } }
public UnitCount
{
get { return _unitCount; }
set {
_unitCount = value;
OnUnitCountChanged();
}
}
...
UpdateTotals()
{
_totalMassText = TotalMass.ToString();
_totalSizeText = TotalSize.ToString();
...
}
}
Container 也是如此,以此类推。
这是过早的优化还是微优化?编译器首先会处理这种事情吗?如果不是,这是一种相当标准的方法吗?