Hi ihr Luxxer,
erstmal entschuldigt diese pauschale Aussage im Titel - diese Frage stellt sich hier nur in meinem speziellen Fall..
ich habe gerade für meine Bachelorarbeit ein kleines Testprogramm geschrieben, um mich später für eine Programmiersprache entscheiden zu können. Dabei ist mir das Ergebnis doch sehr ins Auge gesprungen..
Hier erstmal der Code:
C#
C++
In dem Programm sollen nur die Grundrechenarten abgeackert werden und danach immer 1Mb-Große Dateien erstellt, gelesen und gelöscht werden. Mehr nicht.
Dabei brauchte das C#-Programm 1,4 Sekunden und das C++-Pendant satte 8,8 Sekunden?
Lässt man das ganze Dateigedöns weg, sind beide Sprachen fast identisch schnell. Auch mit Random-Werten, die ich in diesem Beispiel ausgelassen habe.
Ich habe den C++ Teil nur mit google hingebastelt und kenne mich in der Sprache nicht gut aus.. eventuell habe ich einfach etwas sehr schlecht umgesetzt und es geht effektiver? Kann wer was dazu sagen?
erstmal entschuldigt diese pauschale Aussage im Titel - diese Frage stellt sich hier nur in meinem speziellen Fall..

ich habe gerade für meine Bachelorarbeit ein kleines Testprogramm geschrieben, um mich später für eine Programmiersprache entscheiden zu können. Dabei ist mir das Ergebnis doch sehr ins Auge gesprungen..
Hier erstmal der Code:
C#
Code:
static void Main(string[] args)
{
string dataName = @"D:\test.dat";
Stopwatch watch = new Stopwatch();
Random random = new Random();
watch.Start();
for (int i = 0; i < 1000; i++)
{
//dummes gerechne
double bla = 2;//random.NextDouble();
double aboh = 3;// random.NextDouble();
double jo = (bla * aboh) * 100;
double add = jo + jo;
double sub = add - aboh;
//datei erstellen
BinaryWriter write = new BinaryWriter(File.Create(dataName));
//random byte-Array rein schreiben
byte[] data = new byte[1000000];
//random.NextBytes(data);
write.Write(data);
write.Close();
//datei in byte-Array lesen
BinaryReader read = new BinaryReader(File.OpenRead(dataName));
data = read.ReadBytes((int)read.BaseStream.Length);
read.Close();
//datei wieder löschen
File.Delete(dataName);
}
watch.Stop();
double time = watch.ElapsedMilliseconds;
Console.WriteLine(time.ToString() + " ms");
Console.ReadKey();
}
C++
Code:
int _tmain(int argc, _TCHAR* argv[])
{
std::string dataName = "D:\test.dat";
LARGE_INTEGER ticksPerSecond;
LARGE_INTEGER tick1, tick2; // A point in time
LARGE_INTEGER time; // For converting tick into real time
QueryPerformanceCounter(&tick1);
for (int i = 0; i < 1000; i++)
{
//dummes gerechne
double bla = 2;
double aboh = 3;
double jo = (bla * aboh) * 100;
double add = jo + jo;
double sub = add - aboh;
ofstream datei(dataName, ios::app); //Öffnen der Datei
byte b[1000000];
datei << b; //In die Datei schreiben
datei.close();
// Datei schließen
ifstream rd(dataName, ios::binary | ios::ate);
// TestFile wird als Binaerdatei geöffnet.
streamsize len = rd.tellg();
char* buf = new char[len]; // Puffer zum Einlesen der Datei
rd.seekg(ios::beg, 0);
rd.read(buf, len); // Datei in Puffer lesen
rd.close();
_unlink("D:\test.dat");//Datei löschen
}
QueryPerformanceCounter(&tick2);
QueryPerformanceFrequency(&ticksPerSecond);
time.QuadPart = tick2.QuadPart - tick1.QuadPart;
std::cout << "Run time : " << (double)time.QuadPart/(double)ticksPerSecond.QuadPart << std::endl;
cin.get();
return 0;
}
Dabei brauchte das C#-Programm 1,4 Sekunden und das C++-Pendant satte 8,8 Sekunden?
Lässt man das ganze Dateigedöns weg, sind beide Sprachen fast identisch schnell. Auch mit Random-Werten, die ich in diesem Beispiel ausgelassen habe.
Ich habe den C++ Teil nur mit google hingebastelt und kenne mich in der Sprache nicht gut aus.. eventuell habe ich einfach etwas sehr schlecht umgesetzt und es geht effektiver? Kann wer was dazu sagen?

Zuletzt bearbeitet: