Tôi đang khởi chạy hai ứng dụng bảng điều khiển này trên Windows OS. Dưới đây là C# code của tôiTại sao mã C# của tôi nhanh hơn mã C của tôi?
int 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();
Và đây là mã C của tôi. Tôi giả sử đó là C vì tôi đã bao gồm cstdio
và sử dụng các chức năng chuẩn fopen
và fprintf
.
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!";
Khi tôi bắt đầu chương trình C#, tôi ngay lập tức thấy thông báo "Xong!". Khi tôi bắt đầu chương trình C++ (sử dụng các hàm C chuẩn), nó đợi ít nhất 2 giây để hoàn thành và hiển thị thông báo "Xong".
Tôi chỉ chơi xung quanh để kiểm tra tốc độ của chúng, nhưng bây giờ tôi nghĩ tôi không biết nhiều thứ. Ai đó có thể giải thích cho tôi?
LƯU Ý: Không thể trùng lặp "Tại sao C# chạy nhanh hơn C++?", Vì tôi không đưa ra bất kỳ đầu ra bàn điều khiển nào như "cout" hoặc "Console.Writeline()". Tôi chỉ so sánh cơ chế dòng phim không bao gồm bất kỳ sự can thiệp nào dưới bất kỳ hình thức nào có thể làm gián đoạn nhiệm vụ chính của chương trình.
Các ứng dụng không thực hiện các thao tác giống nhau. Trong khi phiên bản C# xây dựng một đối tượng chuỗi tạm thời, nó được ghi vào tệp, mã C++ gọi 'fprintf' (không thực sự thực hiện bất kỳ định dạng nào). Sau này vẫn cần phải phân tích chuỗi định dạng. Một sự khác biệt: Mã .NET không chờ xử lý tệp gốc để đóng. Tuy nhiên, mã không được quản lý thực hiện. – IInspectable
đệm có lẽ, tại sao bạn không sử dụng một fstream? –
Có thể vì 'fprintf' xóa từng dòng vào tệp trong khi' StreamWriter' ghi vào bộ nhớ đệm và tối ưu hóa ghi đĩa. – Heavy