Tôi đã chạy một số thử nghiệm, để xem cách đăng nhập của tôi sẽ thực hiện thay vì làm File.AppendAllText
trước tiên tôi sẽ ghi vào luồng bộ nhớ và sau đó sao chép vào tệp. Vì vậy, chỉ để xem làm thế nào nhanh chóng hoạt động bộ nhớ là tôi đã làm điều này ..tại sao tôi nhận được System.OutOfMemoryException ngay cả khi có khoảng 700Mb RAM miễn phí?
private void button1_Click(object sender, EventArgs e)
{
using (var memFile = new System.IO.MemoryStream())
{
using (var bw = new System.IO.BinaryWriter(memFile))
{
for (int i = 0; i < Int32.MaxValue; i++)
{
bw.Write(i.ToString() + Environment.NewLine);
}
bw.Flush();
}
memFile.CopyTo(new System.IO.FileStream(System.IO.Path.Combine("C", "memWriteWithBinaryTest.log"), System.IO.FileMode.OpenOrCreate));
}
}
Khi i
đạt 25413324
tôi nhận được một Exception of type 'System.OutOfMemoryException' was thrown.
mặc dù tôi Process Explorer nói rằng tôi có khoảng 700MB ram miễn phí ???
Sau đây là các ảnh chụp màn hình (chỉ trong trường hợp)
Process Explorer
Đây là Winform
EDIT: Vì lợi ích của các đối tượng hơn được tạo ra trên heap, tôi đã viết lại số bw.write
vào số
bw.Write(i);
Theo câu trả lời, 'BinaryWriter' không viết ra biểu diễn chuỗi của số. Nó sẽ viết biểu diễn byte. Có lẽ bạn muốn thứ hai, nhưng từ mã gốc nó không xuất hiện như vậy. – leppie