Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<VersionPrefix>1.0.0-rc.1</VersionPrefix>
<VersionPrefix>1.0.0-rc.2</VersionPrefix>
<Authors>bitc0der</Authors>
<Copyright>Copyright 2024 © bitc0der</Copyright>
<Company>bitc0der</Company>
Expand Down
4 changes: 2 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<ItemGroup>
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="NUnit" Version="4.2.2" />
<PackageVersion Include="NUnit.Analyzers" Version="4.3.0" />
<PackageVersion Include="NUnit.Analyzers" Version="4.4.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.6.0" />
</ItemGroup>
</Project>
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ Yet another one library with .NET streaming helpers.
## StringStream
Simple proxy stream to obrain ability process string data as a stream:
```csharp
using Stream inputStream = new StringStream(source: "some string");
using Stream inputStream = StringStream.Read(source: "some string");
```
Or, you can write to a string:
```csharp
using Stream outputStream = new StringStream();
using Stream outputStream = StringStream.Write();
```

### Key features
Expand All @@ -36,7 +36,7 @@ public static byte[] Compress(string source)
{
ArgumentNullException.ThrowIfNull(source);

using var inputStream = new StringStream(source);
using var inputStream = StringStream.Read(source);
using var outputStream = new MemoryStream();
using var gzipStream = new GZipStream(outputStream, CompressionMode.Compress);

Expand All @@ -58,7 +58,7 @@ public static string Decompress(Stream sourceStream)
{
ArgumentNullException.ThrowIfNull(source);

using var outputStream = new StringStream();
using var outputStream = StringStream.Write();
using var gZipStream = new GZipStream(sourceStream, CompressionMode.Decompress, leaveOpen: true);

gZipStream.CopyTo(outputStream);
Expand Down
34 changes: 17 additions & 17 deletions src/StreamTools.Benchmarks/README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
# Benchmark results

## StringBufferBenchmark
## StringBufferWriteBenchmark
```text
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
|------------------------ |---------:|----------:|---------:|---------:|---------:|---------:|----------:|
| StringBuilderBuffer | 42.33 ms | 15.960 ms | 0.875 ms | 272.7273 | 272.7273 | 272.7273 | 256 MB |
| ArrayStringBuffer | 30.40 ms | 2.140 ms | 0.117 ms | 250.0000 | 250.0000 | 250.0000 | 128 MB |
| MemoryStringBuffer | 30.35 ms | 0.840 ms | 0.046 ms | 250.0000 | 250.0000 | 250.0000 | 128 MB |
| Encoding_UTF8_GetString | 21.16 ms | 5.033 ms | 0.276 ms | 937.5000 | 937.5000 | 937.5000 | 128 MB |
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
|------------------------ |---------:|---------:|---------:|---------:|---------:|---------:|----------:|
| StringBuilderBuffer | 39.31 ms | 7.892 ms | 0.433 ms | 272.7273 | 272.7273 | 272.7273 | 256 MB |
| ArrayStringBuffer | 30.26 ms | 0.379 ms | 0.021 ms | 250.0000 | 250.0000 | 250.0000 | 128 MB |
| MemoryStringBuffer | 30.39 ms | 2.484 ms | 0.136 ms | 250.0000 | 250.0000 | 250.0000 | 128 MB |
| Encoding_UTF8_GetString | 20.90 ms | 2.323 ms | 0.127 ms | 937.5000 | 937.5000 | 937.5000 | 128 MB |
```

## StringStreamReadBenchmark
```text
| Method | Mean | Error | StdDev | Allocated |
|------------- |---------:|----------:|---------:|-----------:|
| StringStream | 36.01 ms | 12.910 ms | 0.708 ms | 125.9 KB |
| MemoryStream | 46.32 ms | 4.561 ms | 0.250 ms | 65656.9 KB |
| Method | Mean | Error | StdDev | Allocated |
|------------------ |---------:|----------:|---------:|-----------:|
| StringStream_Read | 35.90 ms | 25.767 ms | 1.412 ms | 125.91 KB |
| MemoryStream | 47.87 ms | 5.071 ms | 0.278 ms | 65656.9 KB |
```

## StringStreamWriteBenchmark
```text
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
|------------------------------- |---------:|---------:|--------:|----------:|----------:|----------:|----------:|
| StringStream_WithStringBuilder | 163.8 ms | 28.43 ms | 1.56 ms | 2500.0000 | 2500.0000 | 2500.0000 | 256.05 MB |
| StringStream_WithArrayPool | 172.4 ms | 8.27 ms | 0.45 ms | - | - | - | 128 MB |
| StringStream_WithMemoryPool | 169.0 ms | 10.26 ms | 0.56 ms | - | - | - | 128 MB |
| MemoryStream | 190.2 ms | 44.56 ms | 2.44 ms | 4666.6667 | 4666.6667 | 4666.6667 | 255.88 MB |
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
|------------------------------------ |---------:|---------:|--------:|----------:|----------:|----------:|----------:|
| StringStream_WriteWithStringBuilder | 166.6 ms | 56.72 ms | 3.11 ms | 2500.0000 | 2500.0000 | 2500.0000 | 256.05 MB |
| StringStream_WriteWithArrayPool | 175.6 ms | 36.60 ms | 2.01 ms | - | - | - | 128 MB |
| StringStream_WriteWithMemoryPool | 178.5 ms | 16.09 ms | 0.88 ms | - | - | - | 128 MB |
| MemoryStream | 186.2 ms | 8.86 ms | 0.49 ms | 4666.6667 | 4666.6667 | 4666.6667 | 255.88 MB |
```

# Legend
Expand Down
9 changes: 5 additions & 4 deletions src/StreamTools.Benchmarks/StringBufferBenchmark.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Text;
using BenchmarkDotNet.Attributes;
using StreamTools.Benchmarks.Utils;
using StreamTools.Buffers;
using System.Text;

namespace StreamTools.Benchmarks;

[ShortRunJob]
[MemoryDiagnoser]
public class StringBufferBenchmark
public class StringBufferWriteBenchmark
{
private byte[]? _bytes;

Expand Down Expand Up @@ -40,7 +41,7 @@ public string MemoryStringBuffer()

private static string Write(IStringBuffer buffer, byte[] bytes)
{
buffer.Append(bytes, offset: 0, length: bytes.Length);
buffer.Append(bytes.AsMemory());
return buffer.Build();
}
}
8 changes: 4 additions & 4 deletions src/StreamTools.Benchmarks/StringStreamReadBenchmark.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.IO.Compression;
using System.IO;
using System.IO;
using System.IO.Compression;
using System.Text;
using BenchmarkDotNet.Attributes;
using StreamTools.Benchmarks.Utils;
Expand Down Expand Up @@ -36,9 +36,9 @@ public void IterationCleanup()
}

[Benchmark]
public void StringStream()
public void StringStream_Read()
{
using var stream = new StringStream(source: _string!);
using var stream = StringStream.Read(source: _string!);
Compress(stream);
}

Expand Down
18 changes: 9 additions & 9 deletions src/StreamTools.Benchmarks/StringStreamWriteBenchmark.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using BenchmarkDotNet.Attributes;
using StreamTools.Benchmarks.Utils;
using System.IO;
using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
using StreamTools.Benchmarks.Utils;

namespace StreamTools.Benchmarks;

Expand All @@ -18,25 +18,25 @@ public void GlobalSetup()
}

[Benchmark]
public string StringStream_WithStringBuilder()
public string StringStream_WriteWithStringBuilder()
{
using var stream = StringStream.WithStringBuilder();
using var stream = StringStream.WriteWithStringBuilder();
_buffer!.DecompressTo(stream);
return stream.GetString();
}

[Benchmark]
public string StringStream_WithArrayPool()
public string StringStream_WriteWithArrayPool()
{
using var stream = StringStream.WithArrayPool();
using var stream = StringStream.WriteWithArrayPool();
_buffer!.DecompressTo(stream);
return stream.GetString();
}

[Benchmark]
public string StringStream_WithMemoryPool()
public string StringStream_WriteWithMemoryPool()
{
using var stream = StringStream.WithMemoryPool();
using var stream = StringStream.WriteWithMemoryPool();
_buffer!.DecompressTo(stream);
return stream.GetString();
}
Expand Down
4 changes: 2 additions & 2 deletions src/StreamTools.Benchmarks/Utils/CompressExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System;
using System.IO.Compression;
using System.IO;
using System.IO.Compression;
using System.Text;

namespace StreamTools.Benchmarks.Utils;
Expand All @@ -11,7 +11,7 @@ public static byte[] Compress(this string source, Encoding? encoding = null)
{
ArgumentNullException.ThrowIfNull(source);

using var inputStream = new StringStream(source: source, encoding);
using var inputStream = StringStream.Read(source: source, encoding);
using var outputStream = new MemoryStream();
using var gZipStream = new GZipStream(outputStream, CompressionMode.Compress, leaveOpen: true);

Expand Down
2 changes: 1 addition & 1 deletion src/StreamTools.Tests/BufferTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public void Should_WriteData(Func<IStringBuffer> func)
// Act
using var buffer = func();

buffer.Append(buffer: bytes, offset: 0, length: bytes.Length);
buffer.Append(buffer: bytes.AsMemory());

// Assert
var result = buffer.Build();
Expand Down
Loading