如何缩短方法持续时间?在Dart for loop中,如果列表的索引约为700000,则需要13秒。如何减少';对于循环';?
下面是创建与trotter包的组合并将其添加到列表中的代码。 如果有大约100万个索引,那么方法的执行时间将超过13秒。这似乎花了太长时间,我正在寻找解决办法如何缩短方法持续时间?在Dart for loop中,如果列表的索引约为700000,则需要13秒。如何减少';对于循环';?,dart,Dart,下面是创建与trotter包的组合并将其添加到列表中的代码。 如果有大约100万个索引,那么方法的执行时间将超过13秒。这似乎花了太长时间,我正在寻找解决办法 import 'package:trotter/trotter.dart'; void main() { comboValue(); } List<int> _choiceNumbers = List.generate(30, (i) => i); void comboValue() { final sta
import 'package:trotter/trotter.dart';
void main() {
comboValue();
}
List<int> _choiceNumbers = List.generate(30, (i) => i);
void comboValue() {
final start = DateTime.now();
List<List> combosList = [];
if (_choiceNumbers.length >= 6) {
final bagOfItems = _choiceNumbers, combos = Combinations(6, bagOfItems);
for (final combo in combos()) {
combosList.add(combo);
}
int totalCombo = combos.length.toInt();
} else {}
print(combosList.length);
final end = DateTime.now();
print('method duration: ${end.difference(start)}');
}
import'包:trotter/trotter.dart';
void main(){
组合值();
}
List _choiceNumbers=List.generate(30,(i)=>i);
无效值(){
最终开始=DateTime.now();
列表组合列表=[];
如果(_choiceNumbers.length>=6){
最终bagOfItems=_ChoiceNumber,combos=组合(6,bagOfItems);
for(combos()中的最后一个组合){
组合列表。添加(组合);
}
int totalCombo=combos.length.toInt();
}else{}
打印(组合列表长度);
final end=DateTime.now();
打印('方法持续时间:${end.difference(start)}');
}
如果使用Dart Observatory,您可以看到程序中的大部分CPU时间都用于BigInt操作
如果查看trotter包的pub.dev页面,您可以看到这是一个设计选择:
由于我们有时使用的索引太大,无法用64位的int
表示,因此使用BigInt
实现索引和长度
由于以下问题而添加:
那么,这种设计选择的问题是,BigInt
确实会对性能产生重大影响,因为对数字的所有操作都需要额外的处理,即使对于较小的数字也是如此
解决方案是要求软件包的开发人员提供一些方法来使用软件包,而不使用
BigInt
,或者制作自己的fork,将其更改为使用int
,因为我认为BigInt
的性能无法得到很大改善。谢谢您的回答。我将根据你的教学努力提高。祝你家平安。