C# 通过将计算结果缓存到字符串变量进行优化
我有几个类将计算成员公开给UI。我正试图优化,使读数仅在需要时获得一个新值 例如,我有一个可以装物品的容器。项目有UnitMass、UnitSize、UnitCount等。项目还计算其总质量(UnitMass x UnitCount)、TotalSize等。容器通过对其内容的各个成员求和来计算其TotalContentMass、TotalContentSize等 一个容器所有者在任何时候都可以看到100个容器的TotalContentMass等的读数。任何容器读取的任何数量都可能每秒更改30倍,或者可能连续数小时保持不变 [Container 1] TotalContentMass: 218 | AvailableMass: 1991 [Item 1] Units: 5 | TotalMass: 50 [Item 2] Units: 3 | TotalMass: 96 ... [Container 2] TotalContentMass: 944 | AvailableMass: 53 [Item 1] Units: 12 | TotalMass: 16 [Item 2] Units: 21 | TotalMass: 488 ... ... 容器也是如此,等等C# 通过将计算结果缓存到字符串变量进行优化,c#,optimization,C#,Optimization,我有几个类将计算成员公开给UI。我正试图优化,使读数仅在需要时获得一个新值 例如,我有一个可以装物品的容器。项目有UnitMass、UnitSize、UnitCount等。项目还计算其总质量(UnitMass x UnitCount)、TotalSize等。容器通过对其内容的各个成员求和来计算其TotalContentMass、TotalContentSize等 一个容器所有者在任何时候都可以看到100个容器的TotalContentMass等的读数。任何容器读取的任何数量都可能每秒更改30倍,
这是过早的还是微观优化?编译器首先会处理这类事情吗?如果不是,这是一种相当标准的方法吗?否,编译器不会在此处自动缓存任何内容。是的,如果计算结果很昂贵,那么它是缓存结果的标准方法。但是创建字符串并不昂贵,所以我认为这是一个微观优化,直到分析器不这么认为。仅在需要时创建字符串,而不是在值更改时立即创建字符串,这甚至可能是有益的。否,编译器不会在此处自动缓存任何内容。是的,如果计算结果很昂贵,那么它是缓存结果的标准方法。但是创建字符串并不昂贵,所以我认为这是一个微观优化,直到分析器不这么认为。仅在需要时创建字符串,而不是在值更改时立即创建字符串,这甚至可能是有益的。@dtb:谢谢。如果你将此作为答复转寄,我将接受。
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();
...
}
}