gpt4 book ai didi

dart - Dart 属性结果需要缓存吗?

转载 作者:IT王子 更新时间:2023-10-29 06:50:14 25 4
gpt4 key购买 nike

我是否需要在发布的 Flutter VM 中缓存 Dart 属性结果以获得最佳性能?

它是dartpad,缓存会提高性能。

class Piggybank {
List<num> moneys = [];
Piggybank();

save(num amt) {
moneys.add(amt);
}

num get total {
print('counting...');
return moneys.reduce((x, y) => x + y);
}

String get whoAmI {
return total < 10 ? 'poor' : total < 10000 ? 'ok' : 'rich';
}

String get uberWhoAmI {
num _total = total;
return _total < 10 ? 'poor' : _total < 10000 ? 'ok' : 'rich';
}
}

void main() {
var bank = new Piggybank();
new List<num>.generate(10000, (i) => i + 1.0)..forEach((x) => bank.save(x));
print('Me? ${bank.whoAmI}');
print('Me cool? ${bank.uberWhoAmI}');
}

结果

counting...
counting...
Me? rich
counting...
Me cool? rich

属性方法没有副作用。

最佳答案

这完全取决于计算的成本以及向属性请求结果的频率。

如果你确实想要缓存,Dart 有很好的缓存语法

  num _total;
num get total {
print('counting...');
return _total ??= moneys.reduce((x, y) => x + y);
}

String _whoAmI;
String get whoAmI =>
_whoAmI ??= total < 10 ? 'poor' : total < 10000 ? 'ok' : 'rich';


String _uberWhoAmI;
String get uberWhoAmI =>
_uberWhoAmI ??= total < 10 ? 'poor' : _total < 10000 ? 'ok' : 'rich';

要重置缓存,因为结果所依赖的某些值已更改,只需将其设置为null

  save(num amt) {
moneys.add(amt);
_total = null;
_whoAmI = null;
_uberWhoAmI = null;
}

并且下次访问属性时,将重新计算值。

关于dart - Dart 属性结果需要缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45973818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com