2015-04-02 14 views
16

Đối với các nhà xây dựng public StreamWriter(Stream stream) là gì, MSDN nóikích thước bộ đệm mặc định cho StreamWriter

Khởi một trường hợp mới của lớp StreamWriter cho quy định dòng bằng cách sử dụng mã UTF-8 và kích thước bộ đệm mặc định.

Tôi muốn sử dụng một trong các quá tải khởi tạo khác nhưng muốn sử dụng kích thước bộ đệm mặc định. Kích thước bộ đệm mặc định là gì? MSDN không nói bất cứ đâu. Rubens Farias' answer here nói rằng đó là "4 KiB" (bất cứ điều gì có nghĩa là ... KB tôi đoán?) Nhưng không có liên kết để chứng minh điều đó.

+0

[Bài đăng này] (http://stackoverflow.com/questions/5670873/streamwriter-automatically-flushing-buffer-when-given-large-messages) gợi ý rằng kích thước bộ đệm mặc định là 1024 byte. – dotNET

+0

Ah khi tài liệu không thành công, dịch ngược. Tôi luôn quên điều đó! Cảm ơn :) –

+1

[Đây là] (http://referencesource.microsoft.com/#mscorlib/system/io/streamwriter.cs,62bd8ad495f57b21,references) –

Trả lời

27

Ah khi tài liệu không thành công, dịch ngược. Tôi luôn quên điều đó!

Vâng, đừng làm vậy. Nó không còn cần thiết nữa, bạn có thể xem mã nguồn thực tế mà các lập trình viên của Microsoft đã viết. Luôn luôn tốt hơn so với mã được biên dịch lại, nó có nhận xét.

Truy cập trang web Reference Source. Nó đã được cập nhật khoảng một năm trước đây, bây giờ nó có một giao diện trình duyệt rất mượt mà thực sự nhanh hơn một trình giải mã. Chỉ cần nhập StreamWriter vào hộp tìm kiếm. Chỉ mất vài chục giây để khám phá:

// For UTF-8, the values of 1K for the default buffer size and 4K for the 
    // file stream buffer size are reasonable & give very reasonable 
    // performance for in terms of construction time for the StreamWriter and 
    // write perf. Note that for UTF-8, we end up allocating a 4K byte buffer, 
    // which means we take advantage of adaptive buffering code. 
    // The performance using UnicodeEncoding is acceptable. 
    internal const int DefaultBufferSize = 1024; // char[] 
    private const int DefaultFileStreamBufferSize = 4096; 

Vì vậy, mặc định là 1024 ký tự cho StreamWriter. Và nếu bạn ghi vào một tập tin thay vì một dòng thì có một FileStream với một bộ đệm 4096 byte, không thể thay đổi điều đó. Nó đưa ra một vấn đề cổ điển với các bình luận, họ có một sở trường để không được duy trì và không phù hợp với mã. Noodling về "đệm thích ứng" không thực sự được thực hiện. KiB là một con vật có 1024 ngón chân, không bao giờ là 1000.

Các vấn đề liên quan