adjust stream buffersize based on file size

This commit is contained in:
Stanley Dimant
2024-11-04 21:20:40 +01:00
parent 9caf90406c
commit 152ee81038

View File

@@ -12,10 +12,33 @@ public sealed class BlockFileDataSubstream : IDisposable
public BlockFileDataSubstream(FileInfo file) public BlockFileDataSubstream(FileInfo file)
{ {
_dataStreamLazy = new(() => File.Open(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Inheritable)); _dataStreamLazy = new(() => File.Open(file.FullName, GetFileStreamOptions(file.Length)));
_headerStream = new MemoryStream(Encoding.ASCII.GetBytes("#" + file.Name + ":" + file.Length.ToString(CultureInfo.InvariantCulture) + "#")); _headerStream = new MemoryStream(Encoding.ASCII.GetBytes("#" + file.Name + ":" + file.Length.ToString(CultureInfo.InvariantCulture) + "#"));
} }
private static FileStreamOptions GetFileStreamOptions(long fileSize)
{
int bufferSize = fileSize switch
{
<= 128 * 1024 => 0,
<= 512 * 1024 => 4096,
<= 1 * 1024 * 1024 => 65536,
<= 10 * 1024 * 1024 => 131072,
<= 100 * 1024 * 1024 => 524288,
_ => 1048576
};
FileStreamOptions opts = new()
{
Mode = FileMode.Open,
Access = FileAccess.Read,
Share = FileShare.Read | FileShare.Inheritable,
BufferSize = bufferSize
};
return opts;
}
public int Read(byte[] inputBuffer, int offset, int count) public int Read(byte[] inputBuffer, int offset, int count)
{ {
int bytesRead = 0; int bytesRead = 0;