I read / write a CSV file of about 1GB in multiple programming languages and time it!
--Check using the same file in any language --Read the file line by line and write line by line --All Docker Images should use base (Ubuntu 18.04 LTS) to eliminate OS differences.
language | Average time run 5 times(Seconds) |
---|---|
C-lang | 6.2962 |
C++ | 6.0538 |
C# | 17.1798 |
Golang | 10.3966 |
Java | 21.0840 |
Python | 32.6949 |
Ruby | 30.7153 |
Scala | 21.8364 |
After all C / C ++ is by far the fastest! !! Go language in second place
I wrote C ++ for the first time in 5 years, so I don't think it's beautiful, but since it was the fastest, I'll post it as a sample.
I implemented it in other languages based on the following behavior.
--Calculate the average time executed 5 times --Read one line and write one line
#include <iostream>
#include <fstream>
#include <time.h>
#include <iomanip>
using namespace std;
int main(int argc, char *argv[])
{
cout << "START!!!" << endl;
clock_t start, end;
double time, sum = 0;
int count = 5;
for (int i = 0; i < count; i++)
{
start = clock();
ifstream ifs("/fixtures/sample.csv");
ofstream ofs("./sample.csv");
const int SIZE = 1024;
char buffer[SIZE];
while (ifs.getline(buffer, SIZE))
{
// ofs << buffer << endl;It's really slow
ofs << buffer << "\n";
}
end = clock();
time = (double)(end - start) / CLOCKS_PER_SEC;
cout << "Time Result: ";
cout << fixed << setprecision(4) << time << endl;
sum += time;
}
cout << "C++ Average: ";
cout << fixed << setprecision(4) << sum / count << endl;
return 0;
}
As mentioned in the comment in the source, in C ++, writing with ʻofs << buffer << endl; `has a problem that the speed drops significantly, so I added the line feed code myself.
As a result, as expected, C / C ++ was by far the best. Since Ruby and Python are scripting languages, I thought it would be slow, but it was still slow. (Maybe it's a matter of my writing) The Go language was so fast that I had never used it at work, but I was very interested in it!
Actually I wanted to make Rust, but I implemented it halfway due to lack of knowledge and was frustrated, so I excluded it this time. We are always waiting for PR from Rust love people!
Also, if there is a way of writing that can be done faster than my implementation and the result will be different from this ranking, I am waiting for PR! (I would appreciate it if the basic concept remains the same)
https://github.com/MasanoriIwakura/multi-lang-battle
Recommended Posts