Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attachments grouping and optimisations and new api features with fixes #143

Merged
merged 1 commit into from
Nov 29, 2024
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using Talkie.Models;
using Talkie.Sequences;

namespace Talkie.Benchmarks.Benchmarks;

[MemoryDiagnoser]
[SimpleJob(RunStrategy.Throughput)]
public class FirstAndLastBenchmark
{
private const int Capacity = 10;

private FrozenSequence<Reference>? _frozenSequence;

private IEnumerable<Reference>? _referenceFrozenSequence;

private RemovableSequence<Reference>? _removableSequence;

private Sequence<Reference>? _sequence;

private LinkedList<Reference>? _linkedList;

private List<Reference>? _list;

[GlobalSetup]
public void Setup()
{
SetupFrozenSequence();
SetupRemovableSequence();
SetupSequence();
SetupLinkedList();
SetupList();
}

public void SetupFrozenSequence()
{
var sequence = new List<Reference>();

for (var i = 0; i < Capacity; i++)
{
sequence.Add(Reference.Shared);
}

_frozenSequence = sequence.ToFrozenSequence();
_referenceFrozenSequence = _frozenSequence;
}

public void SetupRemovableSequence()
{
var removableSequence = new RemovableSequence<Reference>();

for (var i = 0; i < Capacity; i++)
{
_ = removableSequence.Add(Reference.Shared);
}

_removableSequence = removableSequence;
}

public void SetupSequence()
{
var sequence = new Sequence<Reference>();

for (var i = 0; i < Capacity; i++)
{
sequence.Add(Reference.Shared);
}

_sequence = sequence;
}

public void SetupLinkedList()
{
var linkedList = new LinkedList<Reference>();

for (var i = 0; i < Capacity; i++)
{
_ = linkedList.AddLast(Reference.Shared);
}

_linkedList = linkedList;
}

public void SetupList()
{
var list = new List<Reference>();

for (var i = 0; i < Capacity; i++)
{
list.Add(Reference.Shared);
}

_list = list;
}

[Benchmark]
public void RunFrozenSequenceFirstAndLast()
{
_ = _frozenSequence!.First();
_ = _frozenSequence!.Last();
}

[Benchmark]
public void RunReferenceFrozenSequenceFirstAndLast()
{
_ = _referenceFrozenSequence!.First();
_ = _referenceFrozenSequence!.Last();
}

[Benchmark]
public void RunReferenceSequencingFrozenSequenceFirstAndLast()
{
_ = _referenceFrozenSequence!.Sequencing().First();
_ = _referenceFrozenSequence!.Sequencing().Last();
}

[Benchmark]
public void RunRemovableSequenceFirstAndLast()
{
_ = _removableSequence!.First();
_ = _removableSequence!.Last();
}

[Benchmark]
public void RunSequenceFirstAndLast()
{
_ = _sequence!.First();
_ = _sequence!.Last();
}

[Benchmark]
public void RunLinkedListFirstAndLast()
{
_ = _linkedList!.First();
_ = _linkedList!.Last();
}

[Benchmark]
public void RunListFirstAndLast()
{
_ = _list!.First();
_ = _list!.Last();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@

namespace Talkie.Benchmarks.Benchmarks;

[MemoryDiagnoser]
[SimpleJob(RunStrategy.Throughput)]
public class ForeachBenchmark
{
private FrozenSequence<Reference>? _frozenSequence;

private IEnumerable<Reference>? _referenceFrozenSequence;

private RemovableSequence<Reference>? _removableSequence;

private Sequence<Reference>? _sequence;
Expand All @@ -18,6 +21,8 @@ public class ForeachBenchmark

private List<Reference>? _list;

private IEnumerable<Reference>? _referenceList;

[Params(0, 1, 10, 100, 1000, 10000)]
public int Capacity { get; set; }

Expand All @@ -41,6 +46,7 @@ public void SetupFrozenSequence()
}

_frozenSequence = sequence.ToFrozenSequence();
_referenceFrozenSequence = _frozenSequence;
}

public void SetupRemovableSequence()
Expand Down Expand Up @@ -89,6 +95,7 @@ public void SetupList()
}

_list = list;
_referenceList = _list;
}

[Benchmark]
Expand All @@ -100,6 +107,15 @@ public void RunFrozenSequenceForeach()
}
}

[Benchmark]
public void RunReferenceFrozenSequenceForeach()
{
foreach (var value in _referenceFrozenSequence!)
{
_ = value;
}
}

[Benchmark]
public void RunRemovableSequenceForeach()
{
Expand Down Expand Up @@ -135,4 +151,13 @@ public void RunListForeach()
_ = value;
}
}

[Benchmark]
public void RunReferenceListForeach()
{
foreach (var value in _referenceList!)
{
_ = value;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<ItemGroup Label="Dependencies">
<ProjectReference Include="..\..\Sources\Falko.Talkie.Core\Falko.Talkie.Core.csproj" />
<PackageReference Include="BenchmarkDotNet" />
<ProjectReference Include="..\..\Sources\Falko.Talkie.Signals.Extensions\Falko.Talkie.Signals.Extensions.csproj" />
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions Benchmarks/Falko.Talkie.Benchmarks.Sequences/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
using Talkie.Benchmarks.Benchmarks;

BenchmarkRunner.Run<AddBenchmark>();
BenchmarkRunner.Run<FirstAndLastBenchmark>();
BenchmarkRunner.Run<RemoveBenchmark>();
BenchmarkRunner.Run<ForeachBenchmark>();
26 changes: 13 additions & 13 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<Project>
<ItemGroup Label="Dependencies">
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
<PackageVersion Include="Serilog" Version="4.1.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="NUnit" Version="4.2.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageVersion Include="NUnit.Analyzers" Version="4.4.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
</ItemGroup>
</Project>
<ItemGroup Label="Dependencies">
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
<PackageVersion Include="Serilog" Version="4.1.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="NUnit" Version="4.2.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageVersion Include="NUnit.Analyzers" Version="4.4.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion Examples.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<PropertyGroup Label="Assembly">
<OutputType>exe</OutputType>
<PublishAot>true</PublishAot>
<PublishAot>false</PublishAot>
<OptimizationPreference>speed</OptimizationPreference>
<TrimMode>full</TrimMode>
<ServerGarbageCollection>true</ServerGarbageCollection>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Import Project="../../Examples.Build.props" />

<PropertyGroup Label="Assembly">
<AssemblyName>SimpleTelegramBot</AssemblyName>
<AssemblyName>Bot</AssemblyName>
</PropertyGroup>

<ItemGroup Label="Dependencies">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Talkie.Flows;
using Talkie.Handlers;
using Talkie.Models.Messages;
using Talkie.Models.Messages.Attachments;
using Talkie.Pipelines.Handling;
using Talkie.Pipelines.Intercepting;
using Talkie.Signals;
Expand Down
7 changes: 4 additions & 3 deletions Examples/Falko.Talkie.Examples.Microsoft.Hosting/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
.WriteTo.Console())
.UseTalkie(configuration => configuration
.SetSignalsLogging())
.AddIntegrations<TelegramSubscriber>()
.AddBehaviors<HelloSubscriber>()
.AddBehaviors<StartSubscriber>()
.ConfigureServices(services => services
.AddIntegrations<TelegramSubscriber>()
.AddBehaviors<HelloSubscriber>()
.AddBehaviors<StartSubscriber>())
.RunConsoleAsync();
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public void Subscribe(ISignalFlow flow, IRegisterOnlyDisposableScope disposables
.PublishMessageAsync(message => message
.SetReply(context.GetMessage())
.SetContent(content => content
.AddText(nameof(Talkie), [BoldTextStyle.FromTextRange, BoldTextStyle.FromTextRange])
.AddText(nameof(Talkie), BoldTextStyle.FromTextRange)
.AddText(" is a library for building chatbots in .NET.", ItalicTextStyle.FromTextRange, BoldTextStyle.FromTextRange)),
cancellation)
.AsValueTask())
Expand Down
76 changes: 36 additions & 40 deletions Falko.Talkie.slnx
Original file line number Diff line number Diff line change
@@ -1,41 +1,37 @@
<Solution>
<Folder Name="/Assets/">
<File Path="Common.Build.props" />
<File Path="nuget.config" />
<File Path=".gitignore" />
<File Path=".gitattributes" />
<File Path="ReadMe.md" />
<File Path="Benchmarks.Build.props" />
<File Path="Examples.Build.props" />
<File Path="Logo512.png" />
<File Path="Sources.Build.props" />
<File Path="Tests.Build.props" />
<File Path="Directory.Packages.props" />
<File Path="Icon64.png" />
<File Path="License.md" />
</Folder>

<Folder Name="/Benchmarks/">
<Project Path="Benchmarks\Falko.Talkie.Benchmarks.Sequences\Falko.Talkie.Benchmarks.Sequences.csproj" Type="Classic C#" />
</Folder>

<Folder Name="/Examples/">
<Project Path="Examples\Falko.Talkie.Examples.Microsoft.Hosting\Falko.Talkie.Examples.Microsoft.Hosting.csproj" Type="Classic C#" />
</Folder>

<Folder Name="/Sources/">
<Project Path="Sources\Falko.Talkie.Bridges.Telegram\Falko.Talkie.Bridges.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Core\Falko.Talkie.Core.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Microsoft.Hosting\Falko.Talkie.Microsoft.Hosting.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms.Telegram\Falko.Talkie.Platforms.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms\Falko.Talkie.Platforms.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Adapters\Falko.Talkie.Signals.Adapters.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Connections\Falko.Talkie.Signals.Connections.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Extensions\Falko.Talkie.Signals.Extensions.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals\Falko.Talkie.Signals.csproj" Type="Classic C#" />
</Folder>

<Folder Name="/Tests/">
<Project Path="Tests\Falko.Talkie.Tests.Sequences\Falko.Talkie.Tests.Sequences.csproj" Type="Classic C#" />
</Folder>
</Solution>
<Folder Name="/Assets/">
<File Path="Common.Build.props" />
<File Path="nuget.config" />
<File Path=".gitignore" />
<File Path=".gitattributes" />
<File Path="ReadMe.md" />
<File Path="Benchmarks.Build.props" />
<File Path="Examples.Build.props" />
<File Path="Logo512.png" />
<File Path="Sources.Build.props" />
<File Path="Tests.Build.props" />
<File Path="Directory.Packages.props" />
<File Path="Icon64.png" />
<File Path="License.md" />
</Folder>
<Folder Name="/Benchmarks/">
<Project Path="Benchmarks\Falko.Talkie.Benchmarks.Sequences\Falko.Talkie.Benchmarks.Sequences.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/Examples/">
<Project Path="Examples\Falko.Talkie.Examples.Microsoft.Hosting\Falko.Talkie.Examples.Microsoft.Hosting.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/Sources/">
<Project Path="Sources\Falko.Talkie.Bridges.Telegram\Falko.Talkie.Bridges.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Core\Falko.Talkie.Core.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Microsoft.Hosting\Falko.Talkie.Microsoft.Hosting.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms.Telegram\Falko.Talkie.Platforms.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms\Falko.Talkie.Platforms.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Adapters\Falko.Talkie.Signals.Adapters.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Connections\Falko.Talkie.Signals.Connections.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Extensions\Falko.Talkie.Signals.Extensions.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals\Falko.Talkie.Signals.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/Tests/">
<Project Path="Tests\Falko.Talkie.Tests.Sequences\Falko.Talkie.Tests.Sequences.csproj" Type="Classic C#" />
</Folder>
</Solution>
Loading
Loading