Selena 1.0.4
dotnet add package Selena --version 1.0.4
NuGet\Install-Package Selena -Version 1.0.4
<PackageReference Include="Selena" Version="1.0.4" />
<PackageVersion Include="Selena" Version="1.0.4" />
<PackageReference Include="Selena" />
paket add Selena --version 1.0.4
#r "nuget: Selena, 1.0.4"
#:package Selena@1.0.4
#addin nuget:?package=Selena&version=1.0.4
#tool nuget:?package=Selena&version=1.0.4
Selena
High-Performance Inter-Process Communication for .NET
Overview
Selena is a zero-dependency, high-performance C# library for inter-process communication (IPC) using Memory-Mapped Files. It enables real-time message exchange between processes with minimal latency and maximum throughput.
Key Features
- Zero Dependencies - Pure C# implementation, no external libraries required
- Cross-Platform - Works on Windows, Linux, and macOS
- High Performance - Up to 600+ MB/s throughput with microsecond latency
- Thread-Safe - Built for concurrent multi-threaded scenarios
- Multiple .NET Versions - Supports .NET 6/7/8/9/10 and .NET Standard 2.0/2.1
- Type-Safe - Generic message serialization with built-in type safety
- Automatic Recovery - Handles process crashes and reconnections gracefully
Installation
dotnet add package Selena
Or via Package Manager Console:
Install-Package Selena
Quick Start
using Selena.API;
// Create a channel
using var channel = new SelenaChannel("MyChannel");
// Subscribe to messages
channel.MessageReceived += (sender, e) =>
{
Console.WriteLine($"Received: {e.GetMessageText()}");
};
// Start listening
channel.Start();
// Send a message
await channel.SendMessageAsync("Hello from Selena!");
Advanced Usage
// Configure advanced options
var config = new SelenaConfig
{
ChannelName = "AdvancedChannel",
BufferSize = 10 * 1024 * 1024, // 10MB buffer
OverflowStrategy = OverflowStrategy.Overwrite,
ScopeMode = ScopeMode.Local, // No admin required
PollingInterval = 5, // 5ms for Linux/macOS
EnableJsonLogging = true
};
using var channel = new SelenaChannel(config);
// Send typed objects
var order = new Order { Id = 123, Total = 99.99m };
await channel.SendObjectAsync(order, messageType: 1);
// Receive typed objects
channel.MessageReceived += (s, e) =>
{
if (e.Message.Header.MessageType == 1)
{
var receivedOrder = e.GetMessageObject<Order>();
Console.WriteLine($"Order #{receivedOrder.Id}: ${receivedOrder.Total}");
}
};
Performance Benchmarks
Benchmarks performed on Intel Core i7-10700K, 32GB RAM, NVMe SSD:
| Message Size | Messages/sec | Throughput | Latency (μs) |
|---|---|---|---|
| 64 bytes | 1,200,000+ | 73 MB/s | < 1 |
| 1 KB | 680,000+ | 664 MB/s | 1-2 |
| 4 KB | 170,000+ | 665 MB/s | 5-6 |
| 16 KB | 42,000+ | 656 MB/s | 20-25 |
Configuration Options
| Option | Description | Default |
|---|---|---|
ChannelName |
Unique channel identifier | Required |
BufferSize |
Shared memory size | 1 MB |
OverflowStrategy |
Buffer full behavior | Overwrite |
ScopeMode |
Windows IPC scope | Local |
PollingInterval |
Unix polling interval | 10 ms |
MaxWaitTime |
Operation timeout | 5000 ms |
Requirements
- .NET 6.0+ or .NET Standard 2.0/2.1 compatible runtime
- Windows 7+, Linux (kernel 2.6.22+), or macOS 10.12+
- Administrator privileges for Global scope (Windows only)
Documentation
For full documentation, examples, and API reference, visit the GitHub repository.
License
This project is licensed under the MIT License - see the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Memory (>= 4.6.3)
- System.Text.Json (>= 10.0.1)
- System.Threading.Channels (>= 10.0.1)
-
.NETStandard 2.1
- System.Text.Json (>= 10.0.1)
- System.Threading.Channels (>= 10.0.1)
-
net10.0
- No dependencies.
-
net6.0
- No dependencies.
-
net7.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.