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
| Offset | O desvio de origem absoluto com base zero |
|---|---|
| Buffer | O destino dos bytes devolvidos |
| Count | O número máximo de bytes a ler |
Valores devolvidos
| 0 | O desvio ou a contagem é inválido, o desvio está no fim da origem ou para além dele, ou o pedido à origem falhou |
|---|---|
| >0 | O 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