Is is useful to use a buffered sink?

I'm optimizing for performance, and using the snap decoder to validate a snappy file.

Is there a point to buffer io::sink for performance?

    let mut src = snap::read::FrameDecoder::new(src);
    // use a 1mb buffered sink
    let mut buffered_sink = io::BufWriter::with_capacity(1_048_576, io::sink());
    match io::copy(&mut src, &mut buffered_sink) {
        Ok(decompressed_bytes) => {
            buffered_sink.flush()?;
            Ok(decompressed_bytes)
        }
        Err(err) => fail_clierror!("Error validating snappy file: {err:?}"),
    }

instead of just:

    let mut src = snap::read::FrameDecoder::new(src);
    let mut sink = io::sink();
    match io::copy(&mut src, &mut sink) {
        Ok(decompressed_bytes) => Ok(decompressed_bytes)
        Err(err) => fail_clierror!("Error validating snappy file: {err:?}"),
    }

No. The Sink just does nothing, buffering it would make it do something (buffer).

Reference: util.rs - source

3 Likes

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.