简单的for循环需要时间在android中执行

时间:2013-06-19 11:03:43

标签: java android android-emulator

我在java中实现了一个代码,它的for循环从0到0x10000不等。 现在我将此代码导入android并运行相同的代码。

问题如果: 在Core中,java循环在最多2秒内执行。 但是当在android中执行相同的循环时,它需要4分钟(恶心)

任何人都可以帮助我解决这个问题,我为了你的理解而粘贴我的循环:

   for (int r = 0; r < 0x10000; r++) {
            for (int j = 0; j < password.length; j += 4) {
                long[] key = {0, 0, 0, 0};
                for (int i = 0; i < 4; i++) {
                    if (i + j < password.length) {
                       //do something
                    }
                }
                //calling one method.
            }

        }

基本上主循环变化高达64000次。请建议。

2 个答案:

答案 0 :(得分:0)

这可能会有所帮助:

int maxR = 0x10000;
int passwordLength = password.length;
for (int r = 0; r < maxR; r++) {
    for (int j = 0; j < passwordLength; j += 4) {
        long[] key = {0, 0, 0, 0};
        for (int i = 0; i < 4; i++) {
            if (i + j < passwordLength) {
               //do something
            }
        }
        //calling one method.
    }
}

但我认为优化的事情可能是你最后一个for循环的内容以及你之后调用的方法...

[编辑] 如果你不能访问“key”数组的其他项而不是索引i的那些项,你可以做Joop Eggen建议的那样:

int maxR = 0x10000;
int passwordLength = password.length;
long[] key = {0, 0, 0, 0};
for (int r = 0; r < maxR; r++) {
    for (int j = 0; j < passwordLength; j += 4) {
        for (int i = 0; i < 4; i++) {
            key[i] = 0;
            if (i + j < passwordLength) {
               //do something
            }
        }
        //calling one method.
    }
}

答案 1 :(得分:0)

long[] key = new long[4];
int incompleteFourer = password.length % 4;
int n = password.length - incompleteFourer ;
for (int r = 0; r < 0x10000; r++) {
   for (int j = 0; j < n; j += 4) {
       for (int i = 0; i < 4; i++) {
           key[i] = 0;
           //do something
        }
        //calling one method.
    }
    if (incompleteFourer != 0) {
        int j = n;;
        //calling one method.
    }
}

key的内存分配一次;假设“做某事”只考虑key[i]。 j的索引总是有4个元素; “调用一个方法”可能无法处理最后三个元素中的一些。 最后1到3个元素是分开处理的。

NetBeans IDE有一个很好的分析器,可能同样的瓶颈涉及两个循环。至少测量Android上的独立调用次数;也许这是一个缓慢的Dalvik实现的一些基本功能。