方法
ArrowStreamDecoderget_next_required_size
始于: 18.0.0
声明 [src]
gsize
garrow_stream_decoder_get_next_required_size (
GArrowStreamDecoder* decoder
)
描述 [src]
此方法为想要优化性能的用户提供。 普通用户不需要使用此方法。
这是普通用户的示例用法
garrow_stream_decoder_consume_buffer(decoder, buffer1);
garrow_stream_decoder_consume_buffer(decoder, buffer2);
garrow_stream_decoder_consume_buffer(decoder, buffer3);
解码器具有内部缓冲区。 如果消耗的数据不足以推进解码器的状态,则消耗的数据将缓冲到内部缓冲区中。 这会导致性能开销。
如果您将 garrow_stream_decoer_get_next_required_size()
大小的数据传递给每个 garrow_stream_decoder_consume_bytes()/garrow_stream_decoder_consume_buffer() 调用,则解码器不会使用其内部缓冲区。 这提高了性能。
这是避免使用内部缓冲区的示例用法
buffer1 = get_data(garrow_stream_decoder_get_next_required_size(decoder));
garrow_stream_decoder_consume_buffer(buffer1);
buffer2 = get_data(garrow_stream_decoder_get_next_required_size(decoder));
garrow_stream_decoder_consume_buffer(buffer2);
用户可以使用此方法来避免创建小块。 记录批处理数据必须是连续的数据。 如果用户将小块传递给解码器,则解码器需要在内部连接小块。 这会导致性能开销。
这是减少小块的示例用法
GArrowResizablBuffer *buffer = garrow_resizable_buffer_new(1024, NULL);
while ((small_chunk = get_data(&small_chunk_size))) {
size_t current_buffer_size = garrow_buffer_get_size(GARROW_BUFFER(buffer));
garrow_resizable_buffer_resize(buffer, current_buffer_size + small_chunk_size,
NULL); garrow_mutable_buffer_set_data(GARROW_MUTABLE_BUFFER(buffer), current_buffer_size, small_chunk, small_chunk_size, NULL); if (garrow_buffer_get_size(GARROW_BUFFER(buffer)) < garrow_stream_decoder_get_next_required_size(decoder)) { continue; } garrow_stream_decoder_consume_buffer(decoder, GARROW_BUFFER(buffer), NULL); g_object_unref(buffer); buffer = garrow_resizable_buffer_new(1024, NULL); } if (garrow_buffer_get_size(GARROW_BUFFER(buffer)) > 0) { garrow_stream_decoder_consume_buffer(decoder, GARROW_BUFFER(buffer), NULL); } g_object_unref(buffer);
可用版本: 18.0.0