方法
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);
Decoder 具有內部緩衝區。如果消耗的資料不足以推進解碼器的狀態,消耗的資料會緩衝到內部緩衝區。這會導致效能上的額外負擔。
如果您將 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