TByteRangeStream.ReadAt

Gestão de documentos, desempenho, concorrência

Descrição

Lê bytes num desvio de origem absoluto sem alterar o cursor posicional de TStreamChamadores concorrentes partilham uma busca em curso para o mesmo bloco alinhado, enquanto blocos adjacentes na fila são obtidos em conjunto num único pedido de origem delimitado

Sintaxe

Delphi

Function TByteRangeStream.ReadAt(Offset: Int64; Var Buffer; Count: LongInt): LongInt;

Parâmetros

OffsetO desvio de origem absoluto com base zero
BufferO destino dos bytes devolvidos
CountO número máximo de bytes a ler

Valores devolvidos

0O desvio ou a contagem é inválido, o desvio está no fim da origem ou para além dele, ou o pedido à origem falhou
>0O número de bytes copiados para Buffer

Observações

TByteRangeStream é declarado em PDFlibNetPDF e o respetivo construtor aceita CoalesceWindowMS, que assume 2 milissegundos por predefiniçãoA janela é aplicada apenas ao primeiro bloco não em cache de cada chamada

ReadAt; os blocos subsequentes continuam imediatamente, e as chamadas Read posicionais não esperam pela janelaUm valor de zero desativa o atraso inicial de recolha, preservando a partilha single-flight no mesmo bloco e a fusão de pedidos já em fila atrás de outra leitura de origemUma busca de origem fundida é limitada a 16 MiB, e as callbacks de origem são serializadas, pelo que uma implementação de callback não precisa da sua própria trava de transporteNão chame de volta o mesmo fluxo a partir da respetiva callback de origem, e destrua o fluxo apenas depois de todos os leitores ativos terem concluído

ClearCache invalida a geração da cache; os chamadores já à espera ainda recebem os seus bytes, mas conclusões desatualizadas não podem repovoar a cache limpa nem os contadores