Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
如何缩短方法持续时间?在Dart for loop中,如果列表的索引约为700000,则需要13秒。如何减少';对于循环';?_Dart - Fatal编程技术网

如何缩短方法持续时间?在Dart for loop中,如果列表的索引约为700000,则需要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

下面是创建与trotter包的组合并将其添加到列表中的代码。 如果有大约100万个索引,那么方法的执行时间将超过13秒。这似乎花了太长时间,我正在寻找解决办法

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
的性能无法得到很大改善。

谢谢您的回答。我将根据你的教学努力提高。祝你家平安。