方法

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

傳回值

類型: gsize

推進解碼器狀態所需的位元組數。