我有以下代码:
var longLorem = "..."; // here is a string, > 1 000 000 length
var bufferSize = 1000000;
var lorem = longLorem.substring(0, bufferSize - 1).split('');
var swap;
var i, j;
for(i=0;i<bufferSize;i++){
for(j=i+1;j<bufferSize;j++){
if(lorem[i] > lorem[j]){
swap = lorem[i];
lorem[i] = lorem[j];
lorem[j] = swap;
}
}
}
为什么它会挂在Chrome下?如何加速JavaScript或者不可能像DOM和UI那样加速?
使用bufferSize=100 000
,它会在2分35秒内完成。
以下C程序在&gt; 17m
完成#include <stdio.h>
#define bufferSize 1000000
int main( int argc, char *argv[] )
{
int i,j;
char swap;
FILE *loremFile = fopen("lorem.txt", "r");
char buff[bufferSize];
fgets(buff, bufferSize, (FILE*)loremFile);
fclose(loremFile);
//printf("'%s'\n-----END--------\n", buff );
for(i=0; i<bufferSize-1;i++)
{
for(j=i+1;j<bufferSize-1;j++)
{
if((int)buff[i] > (int) buff[j])
{
swap = (char)buff[i];
//printf("%c with %c\n", buff[i], buff[j]);
buff[i] =(char) buff[j];
buff[j] = swap;
}
}
}
//buff[bufferSize-1] = '\0';
// for(i=0;i<bufferSize;i++){
// printf("%c", buff[i]);
// }
printf("'%s'\n-----END--------\n", buff);
printf("exit\n");
return 0;
}
C#代码完成大约10米:
using System;
namespace MySort {
public class Some {
public static void Main() {
int bufferSize = 1000000;
string loremFile = System.IO.File.ReadAllText("lorem.txt");
var chars = loremFile.ToCharArray(0, bufferSize);
for(int i = 0; i<bufferSize; i++) {
for(int j=i+1; j<bufferSize; j++) {
if(chars[i] > chars[j]) {
char swap = chars[i];
chars[i] = chars[j];
chars[j] = swap;
}
}
}
Console.Write("'");
Console.Write(chars);
Console.Write("'\n");
}
}
}
答案 0 :(得分:0)
我认为Chrome在长时间运营期间会有悬挂的趋势,有时会崩溃。我已经在Chrome和Firefox中做过一些事情,而Chrome只会崩溃选项卡,就像Firefox一样,它也会永远消失,但它不会崩溃。我会继续在Firefox上获得继续/停止脚本弹出窗口。
如果您说在c
中完成大约需要20分钟,那么我认为网络浏览器需要很长时间(如果不是更长时间),并且在大多数情况下,浏览器会尝试终止该脚本。