2015-04-02 12 views
16

Per il costruttore public StreamWriter(Stream stream), MSDN diceQual è la dimensione del buffer predefinita per StreamWriter

Inizializza una nuova istanza della classe StreamWriter per la flusso specificato utilizzando UTF-8 codifica e la dimensione del buffer predefinita.

Desidero utilizzare uno degli altri sovraccarichi del costruttore ma vorrei utilizzare la dimensione del buffer predefinita. Qual è la dimensione del buffer predefinita? MSDN non dice da nessuna parte. Rubens Farias' risposta here dice che è "4 KiB" (qualunque cosa significhi ... KB, immagino?) Ma non c'è alcun link per sostenerlo.

+0

[questo post] (http://stackoverflow.com/questions/5670873/streamwriter-automatically-flushing-buffer-when-given-large-messages) suggerisce che la dimensione del buffer predefinita è 1024 byte. – dotNET

+0

Ah quando la documentazione fallisce, decompila. Lo dimentico sempre! Grazie :) –

+1

[Eccolo] (http://referencesource.microsoft.com/#mscorlib/system/io/streamwriter.cs,62bd8ad495f57b21,referenze) –

risposta

27

Ah quando la documentazione non riesce, decompilare. Lo dimentico sempre!

Bene, non farlo. Non è più necessario, puoi guardare il vero codice sorgente che i programmatori Microsoft hanno scritto. Sempre meglio del codice decompilato, ha dei commenti.

Visita il sito Web Reference Source. È stato aggiornato circa un anno fa, ora ha un'interfaccia browser molto più veloce di un decompilatore. Basta digitare StreamWriter nella casella di ricerca. Ti porta al massimo una dozzina di secondi a scoprire:

// 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; 

Quindi il valore predefinito è 1024 caratteri per StreamWriter. E se scrivi su un file invece di uno stream, c'è un FileStream con un buffer da 4096 byte, non puoi cambiarlo. Esce un classico problema con i commenti, hanno un talento per non essere mantenuti e mismatch il codice. Il noodling sul "buffering adattivo" non è in realtà implementato. Un KiB è un animale con 1024 dita dei piedi, mai 1000.