Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过将计算结果缓存到字符串变量进行优化_C#_Optimization - Fatal编程技术网

C# 通过将计算结果缓存到字符串变量进行优化

C# 通过将计算结果缓存到字符串变量进行优化,c#,optimization,C#,Optimization,我有几个类将计算成员公开给UI。我正试图优化,使读数仅在需要时获得一个新值 例如,我有一个可以装物品的容器。项目有UnitMass、UnitSize、UnitCount等。项目还计算其总质量(UnitMass x UnitCount)、TotalSize等。容器通过对其内容的各个成员求和来计算其TotalContentMass、TotalContentSize等 一个容器所有者在任何时候都可以看到100个容器的TotalContentMass等的读数。任何容器读取的任何数量都可能每秒更改30倍,

我有几个类将计算成员公开给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 ... ... 容器也是如此,等等


这是过早的还是微观优化?编译器首先会处理这类事情吗?如果不是,这是一种相当标准的方法吗?

否,编译器不会在此处自动缓存任何内容。是的,如果计算结果很昂贵,那么它是缓存结果的标准方法。但是创建字符串并不昂贵,所以我认为这是一个微观优化,直到分析器不这么认为。仅在需要时创建字符串,而不是在值更改时立即创建字符串,这甚至可能是有益的。

否,编译器不会在此处自动缓存任何内容。是的,如果计算结果很昂贵,那么它是缓存结果的标准方法。但是创建字符串并不昂贵,所以我认为这是一个微观优化,直到分析器不这么认为。仅在需要时创建字符串,而不是在值更改时立即创建字符串,这甚至可能是有益的。@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();
        ...
    }
}