Windows OS'de bu iki konsol uygulamasını başlatıyorum. İşte benim C# koduC# kodum neden C kodumdan daha hızlı?
buradaint lineCount = 0;
StreamWriter writer = new StreamWriter("txt1.txt",true);
for (int i = 0; i < 900; i++)
{
for (int k = 0; k < 900; k++)
{
writer.WriteLine("This is a new line" + lineCount);
lineCount++;
}
}
writer.Close();
Console.WriteLine("Done!");
Console.ReadLine();
Ve C kodu olmasıdır. Ben cstdio
dahil edildi ve standart fopen
ve fprintf
işlevlerini kullanıyorum çünkü C olduğunu varsayalım.
FILE *file = fopen("text1.txt","a");
for (size_t i = 0; i < 900; i++)
{
for (size_t k = 0; k < 900; k++)
{
fprintf(file, "This is a line\n");
}
}
fclose(file);
cout << "Done!";
C# programını başlattığımda hemen "Done!" Iletisini görüyorum. C++ programına başladığımda (standart C fonksiyonlarını kullanır), tamamlamak için en az 2 saniye bekler ve bana "Bitti!" Mesajını gösterir.
Hızlarını test etmek için uğraşıyordum, ama şimdi bir çok şey bilmiyorum. Birisi bana açıklayabilir mi?
NOT: değil "Neden C# hızlı C++ daha çalışıyor?", Ben herhangi bir konsol çıktısını vererek değilim çünkü böyle "cout" veya "Console.Writeline()" olarak olası bir kopyası. Ben sadece programın ana görevini kesebilecek herhangi bir müdahale içermeyen filestri mekanizmasını karşılaştırıyorum.
Uygulamalar, aynı işlemleri gerçekleştirmiyor. C# sürümü geçici bir dize nesnesi oluştururken, bu dosyaya yazılır, C++ kodu 'fprintf' çağırır (aslında herhangi bir biçimlendirme yapmadan). İkincisinin hala format dizisini ayrıştırması gerekiyor. Başka bir fark: .NET kodu, yerel dosya tanıtıcısının kapalı olmasını beklemez. Yönetilmeyen kod, ancak yapar. – IInspectable
tamponlama, neden bir fstream kullanmıyorsunuz? –
Belki de, "StreamWriter" bellek arabelleğine yazarken ve disk yazmalarını optimize ederken "fprintf" her satırı dosyaya akıtır. – Heavy