[PYTHON] Messen Sie sich mit Datei-E / A in verschiedenen Sprachen und vergleichen Sie die Geschwindigkeiten

Ich habe eine CSV-Datei von ca. 1 GB in mehreren Programmiersprachen gelesen / geschrieben und sie zeitlich festgelegt!

Gemeinsame Regeln

--Überprüfen Sie, ob in allen Sprachen dieselbe Datei verwendet wird --Lesen Sie die Datei Zeile für Zeile und schreiben Sie sie Zeile für Zeile

Zuallererst das Ergebnis

Sprache Durchschnittliche Laufzeit 5-mal(Sekunden)
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

Immerhin ist C / C ++ bei weitem das schnellste! !! Gehen Sie Sprache auf den zweiten Platz

Implementierungsbeispiel

Ich habe C ++ zum ersten Mal seit 5 Jahren geschrieben, daher finde ich es nicht schön, aber da es das schnellste war, werde ich es als Beispiel veröffentlichen.

Ich habe es basierend auf dem folgenden Verhalten in anderen Sprachen implementiert.

--Berechnen Sie die durchschnittliche Zeit, die fünfmal ausgeführt wird

#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;Es ist sehr langsam
            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;
}

Wie in den Kommentaren in der Quelle erwähnt, verursachte das Schreiben mit ofs << buffer << endl; in C ++ ein Problem, dass die Geschwindigkeit erheblich verlangsamt wurde, sodass ich den Zeilenvorschubcode selbst hinzufügte.

Impressionen

Wie erwartet war das Ergebnis C / C ++. Da Ruby und Python Skriptsprachen sind, dachte ich, es wäre langsam, aber es war immer noch langsam. (Vielleicht ist es eine Frage meines Schreibens) Die Go-Sprache war so schnell, dass ich sie bei der Arbeit noch nie benutzt hatte, aber ich war sehr daran interessiert!

Andere

Eigentlich wollte ich Rust machen, aber ich war frustriert, weil ich es aufgrund mangelnden Wissens zur Hälfte implementiert hatte, also habe ich es diesmal ausgeschlossen. Rost Wir warten immer auf PR von geliebten Menschen!

Wenn es eine Schreibweise gibt, die schneller als meine Implementierung ausgeführt werden kann und das Ergebnis von diesem Ranking abweicht, warte ich auf PR! (Ich würde es begrüßen, wenn das Grundkonzept gleich bleibt)

Das Repository wurde dieses Mal erstellt

https://github.com/MasanoriIwakura/multi-lang-battle

Recommended Posts

Messen Sie sich mit Datei-E / A in verschiedenen Sprachen und vergleichen Sie die Geschwindigkeiten
HMAC in verschiedenen Sprachen
Ich habe N-Queen in verschiedenen Sprachen implementiert und die Geschwindigkeit gemessen
[AOJ] Absteigende Sortierung in verschiedenen Sprachen
Was sind die "Pipeline" und "{...}" in der Jenkins-Pipeline-Pipeline {...} (für Groovy-Anfänger, für erfahrene Sprachen)
Schreiben Sie die O_SYNC-Datei in C und Python
Ich habe einen Unit-Test für verschiedene Sprachen geschrieben