gpt4 book ai didi

java - Android加载一个16KB的文件需要35秒?

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:57 30 4
gpt4 key购买 nike

我的 Nexus One 平板电脑上的 Android 存在内存问题,我希望得到一些见解。

我正在制作一个由 64 个整数组成的数组表示的棋盘游戏。当调用 Activity 的 onPause() 时,它会保存当前棋盘,以及之前回合(最多 64 回合)的每个棋盘。这大约需要 600 毫秒,没问题。当 onResume() 被调用时,是时候加载信息了,完整的撤消历史可能需要长达 35 秒的时间!

        FileInputStream fis = c.openFileInput(filename);
Scanner sc = new Scanner(fis);
int nprev = sc.nextInt(); // Number of previous boards to load
sc.nextLine();
for(int k = 0; k < nprev; k++) {
int[] parr = new int[bsize*bsize];
for(int i = 0; i < bsize; i++) {
for(int j = 0; j < bsize; j++) {
int v = sc.nextInt();
parr[i*bsize+j]=v;
}
sc.nextLine();
}
prevBoards.push(parr);
}

sc.close();
fis.close();
}

bsize=8。所以它只是创建 int[64] 数组,将数字加载到其中,然后将它们插入堆栈 (prevBoards)。它最多可以将 64 个 int[64] 数组压入堆栈。不过,我认为这需要太长时间是不是错了?

我注意到,在加载时,LogCat 充斥着诸如“GC_CONCURRENT freed 402K, 7% free 7500K/8052K ...”之类的消息,这没有意义,因为数组应该只占用 4*64*64/1024=最多16KB内存?

最佳答案

我刚刚重现了您保存 65 整数的问题,并使用您的代码在 onResume 中再次加载它们。 Activity 用了 3 秒来加载这 65 个整数!

我做了一些分析以找出代码在哪里浪费时间,发现 Scanner 类是您的主要问题。它似乎使用了一些正则表达式,几乎所有的 cpu 时间都用于编译一个被调用 65 次的模式。

您应该避免使用扫描器类,并找到一种更好的方法来存储您的整数值。也许看看http://developer.android.com/reference/java/io/ObjectOutputStream.html

关于java - Android加载一个16KB的文件需要35秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13736442/

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