У меня есть файл размером 2 GB (iputfile.txt
), в котором каждая строка в файле является словом, как:
apple
red
beautiful
smell
spark
input
Мне нужно написать программу, чтобы читать каждое слово в файле и печатать количество слов. Я написал его с использованием Java и С++, но результат удивителен: Java работает в 2,3 раза быстрее, чем С++. Мой код выглядит следующим образом:
С++:
int main() {
struct timespec ts, te;
double cost;
clock_gettime(CLOCK_REALTIME, &ts);
ifstream fin("inputfile.txt");
string word;
int count = 0;
while(fin >> word) {
count++;
}
cout << count << endl;
clock_gettime(CLOCK_REALTIME, &te);
cost = te.tv_sec - ts.tv_sec + (double)(te.tv_nsec-ts.tv_nsec)/NANO;
printf("Run time: %-15.10f s\n", cost);
return 0;
}
Вывод:
5e+08
Run time: 69.311 s
Java:
public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
FileReader reader = new FileReader("inputfile.txt");
BufferedReader br = new BufferedReader(reader);
String str = null;
int count = 0;
while((str = br.readLine()) != null) {
count++;
}
System.out.println(count);
long endTime = System.currentTimeMillis();
System.out.println("Run time : " + (endTime - startTime)/1000 + "s");
}
Вывод:
5.0E8
Run time: 29 s
Почему в этой ситуации Java быстрее, чем С++, и как повысить производительность С++?