diff --git a/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp.csproj b/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp.csproj
index 381ff1cf6a..398911013c 100644
--- a/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp.csproj
+++ b/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp.csproj
@@ -2,13 +2,19 @@
Exe
- net7.0
+ net10.0
enable
- disable
+ enable
-
+
+
+
+
+
+ PreserveNewest
+
diff --git a/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharp.cs b/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharp.cs
index 6fb6df97db..35999a6413 100644
--- a/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharp.cs
+++ b/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharp.cs
@@ -3,14 +3,9 @@
namespace FastestWayToReadATextFileInCsharp;
-public class WaysToReadATextFileInCsharp
+public class WaysToReadATextFileInCsharp(string sampleFilePath)
{
- private readonly string _sampleFilePath;
-
- public WaysToReadATextFileInCsharp(string sampleFilePath)
- {
- _sampleFilePath = sampleFilePath;
- }
+ private readonly string _sampleFilePath = sampleFilePath;
public string UseFileReadAllLines()
{
@@ -132,11 +127,13 @@ public string UseBufferedStreamObjectWithNoFileStreamBuffer()
{
var stringBuilder = new StringBuilder();
- using var fileStream = new FileStream(_sampleFilePath,
- FileMode.Open,
- FileAccess.Read,
- FileShare.Read,
- 0);
+ using var fileStream = new FileStream(_sampleFilePath, new FileStreamOptions
+ {
+ Mode = FileMode.Open,
+ Access = FileAccess.Read,
+ Share = FileShare.Read,
+ BufferSize = 0
+ });
using var bufferedStream = new BufferedStream(fileStream);
using var streamReader = new StreamReader(bufferedStream);
@@ -148,4 +145,34 @@ public string UseBufferedStreamObjectWithNoFileStreamBuffer()
return stringBuilder.ToString();
}
+
+ public async Task UseFileReadAllTextAsync()
+ => await File.ReadAllTextAsync(_sampleFilePath);
+
+ public async Task UseFileReadLinesAsync()
+ {
+ var stringBuilder = new StringBuilder();
+
+ await foreach (var line in File.ReadLinesAsync(_sampleFilePath))
+ {
+ stringBuilder.AppendLine(line);
+ }
+ stringBuilder.Length -= Environment.NewLine.Length;
+
+ return stringBuilder.ToString();
+ }
+
+ public async Task UseStreamReaderReadToEndAsync()
+ {
+ using var fileStream = new FileStream(_sampleFilePath, new FileStreamOptions
+ {
+ Mode = FileMode.Open,
+ Access = FileAccess.Read,
+ Share = FileShare.Read,
+ Options = FileOptions.Asynchronous | FileOptions.SequentialScan
+ });
+ using var streamReader = new StreamReader(fileStream);
+
+ return await streamReader.ReadToEndAsync();
+ }
}
\ No newline at end of file
diff --git a/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharpBenchmark.cs b/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharpBenchmark.cs
index cbe33d96c0..2a97cf921f 100644
--- a/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharpBenchmark.cs
+++ b/files-csharp/FastestWayToReadATextFileInCsharp/FastestWayToReadATextFileInCsharp/WaysToReadATextFileInCsharpBenchmark.cs
@@ -10,7 +10,7 @@ namespace FastestWayToReadATextFileInCsharp;
public class WaysToReadATextFileInCsharpBenchmark
{
private static readonly string SampleFilePath
- = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.Parent.Parent.Parent.FullName, "BenchmarkTextFile.txt");
+ = Path.Combine(AppContext.BaseDirectory, "BenchmarkTextFile.txt");
private readonly WaysToReadATextFileInCsharp _textFileReader = new(SampleFilePath);
@@ -53,4 +53,16 @@ public string BufferedStreamObject()
[Benchmark]
public string BufferedStreamWithNoFileStreamBuffer()
=> _textFileReader.UseBufferedStreamObjectWithNoFileStreamBuffer();
+
+ [Benchmark]
+ public async Task FileReadAllTextAsync()
+ => await _textFileReader.UseFileReadAllTextAsync();
+
+ [Benchmark]
+ public async Task FileReadLinesAsync()
+ => await _textFileReader.UseFileReadLinesAsync();
+
+ [Benchmark]
+ public async Task StreamReaderReadToEndAsync()
+ => await _textFileReader.UseStreamReaderReadToEndAsync();
}
\ No newline at end of file
diff --git a/files-csharp/FastestWayToReadATextFileInCsharp/Tests/Tests.csproj b/files-csharp/FastestWayToReadATextFileInCsharp/Tests/Tests.csproj
index 5fced33ef9..6a1905ff23 100644
--- a/files-csharp/FastestWayToReadATextFileInCsharp/Tests/Tests.csproj
+++ b/files-csharp/FastestWayToReadATextFileInCsharp/Tests/Tests.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net10.0
enable
enable
@@ -9,13 +9,13 @@
-
-
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/files-csharp/FastestWayToReadATextFileInCsharp/Tests/WaysToReadATextFileInCsharpTests.cs b/files-csharp/FastestWayToReadATextFileInCsharp/Tests/WaysToReadATextFileInCsharpTests.cs
index df4632c518..9e27ec3bed 100644
--- a/files-csharp/FastestWayToReadATextFileInCsharp/Tests/WaysToReadATextFileInCsharpTests.cs
+++ b/files-csharp/FastestWayToReadATextFileInCsharp/Tests/WaysToReadATextFileInCsharpTests.cs
@@ -100,6 +100,30 @@ public void WhenReadingATextFileWithBufferedStreamObjectWithFileStreamBufferDisa
Assert.Equal(ExpectedText, result);
}
+ [Fact]
+ public async Task WhenReadingATextFileWithFileReadAllTextAsync_ThenReturnsExpectedText()
+ {
+ var result = await _textFileReader.UseFileReadAllTextAsync();
+
+ Assert.Equal(ExpectedText, result);
+ }
+
+ [Fact]
+ public async Task WhenReadingATextFileWithFileReadLinesAsync_ThenReturnsExpectedText()
+ {
+ var result = await _textFileReader.UseFileReadLinesAsync();
+
+ Assert.Equal(ExpectedText, result);
+ }
+
+ [Fact]
+ public async Task WhenReadingATextFileWithStreamReaderReadToEndAsync_ThenReturnsExpectedText()
+ {
+ var result = await _textFileReader.UseStreamReaderReadToEndAsync();
+
+ Assert.Equal(ExpectedText, result);
+ }
+
public void Dispose()
{
if (File.Exists(TempFilePath))