Пример #1
0
 internal SynchronousReader(Stream stream, BufferedStreamReaderConfig config)
 {
     this.stream             = stream;
     stopPrefetchAfterXBytes = config.StopPrefetchAfterXBytes;
     shadowBufferSize        = config.ShadowBufferSize;
     totalBytesProcessed     = 0;
     shadowBuffer            = new ShadowBufferData(shadowBufferSize);
 }
Пример #2
0
 internal PreFetchReader(Stream stream, BufferedStreamReaderConfig config)
 {
     stopPrefetchAfterXBytes = config.StopPrefetchAfterXBytes;
     shadowBufferSize        = config.ShadowBufferSize;
     finished            = false;
     tokenSource         = new CancellationTokenSource();
     totalBytesProcessed = 0;
     this.stream         = stream;
     finishedBuffers     = new AsyncProducerConsumerQueue <ShadowBufferData>();
     idleBuffers         = new AsyncProducerConsumerQueue <ShadowBufferData>();
     for (int f = 0; f < config.TotalPreFetchBlocks; f++)
     {
         idleBuffers.Enqueue(new ShadowBufferData(shadowBufferSize));
     }
     workerTask = Task.Run(WorkerThreadEntrypoint);
 }
Пример #3
0
 public BufferedStreamReader(Stream stream, BufferedStreamReaderConfig config)
 {
     this.stream             = stream;
     this.config             = config;
     innerStreamStartPos     = stream.CanSeek ? stream.Position : 0;
     currentShadowBufferSize = config.ShadowBufferSize;
     totBytesRead            = 0;
     if (config.UsePreFetch)
     {
         reader = new PreFetchReader(stream, config);
     }
     else
     {
         reader = new SynchronousReader(stream, config);
     }
     shadowBuffer = null;
     FillShadowBuffer();
 }