Selena 1.0.2
See the version list below for details.
dotnet add package Selena --version 1.0.2
NuGet\Install-Package Selena -Version 1.0.2
<PackageReference Include="Selena" Version="1.0.2" />
<PackageVersion Include="Selena" Version="1.0.2" />
<PackageReference Include="Selena" />
paket add Selena --version 1.0.2
#r "nuget: Selena, 1.0.2"
#:package Selena@1.0.2
#addin nuget:?package=Selena&version=1.0.2
#tool nuget:?package=Selena&version=1.0.2
<div align="center"> <img src="icon.png" alt="Selena Logo" width="128" height="128">
Selena
High-Performance Inter-Process Communication for .NET
Features • Getting Started • Documentation • Benchmarks • Contributing </div>
🚀 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 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
- 📊 Real-Time Monitoring - Built-in performance metrics and diagnostics
📋 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)
🚀 Getting Started
Installation
Install via NuGet Package Manager:
dotnet add package Selena
Or via Package Manager Console:
Install-Package Selena
Quick Example
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}");
}
};
🏗️ Architecture
graph TB
subgraph "Process A"
A1[SelenaChannel] --> A2[Sender]
A2 --> A3[CircularBuffer]
A3 --> A4[Memory-Mapped File]
end
subgraph "Shared Memory"
A4 <--> MMF[Memory Region]
end
subgraph "Process B"
B4[Memory-Mapped File] --> B3[CircularBuffer]
B3 --> B2[Receiver]
B2 --> B1[SelenaChannel]
B4 <--> MMF
end
📊 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 |
Comparison with Other IPC Methods
| Method | Throughput | Latency | CPU Usage |
|---|---|---|---|
| Selena | 600+ MB/s | < 25μs | Low |
| Named Pipes | 200 MB/s | 50μs | Medium |
| TCP Loopback | 300 MB/s | 100μs | High |
| gRPC (local) | 150 MB/s | 200μs | High |
🛠️ Configuration Options
| Option | Description | Default | Notes |
|---|---|---|---|
ChannelName |
Unique channel identifier | Required | Must be unique per channel |
BufferSize |
Shared memory size | 1 MB | Minimum 1 KB |
OverflowStrategy |
Buffer full behavior | Overwrite | Overwrite or Block |
ScopeMode |
Windows IPC scope | Local | Local (user) or Global (system) |
PollingInterval |
Unix polling interval | 10 ms | Lower = more responsive |
MaxWaitTime |
Operation timeout | 5000 ms | For blocking operations |
📚 Examples
Check out the examples directory for complete samples:
- Simple Communication - Basic send/receive
- Chat Application - Multi-process chat
- Performance Benchmark - Throughput testing
- Object Serialization - Type-safe messaging
- Stress Test - High-load scenarios
🤝 Contributing
We welcome contributions! Please see our Contributing Guide for details.
Development Setup
- Clone the repository
git clone https://github.com/Taiizor/Selena.git
cd Selena
- Build the project
dotnet build
- Run tests
dotnet test
- Run benchmarks
dotnet run -c Release --project tests/Selena.Benchmarks
📝 Documentation
🛣️ Roadmap
- Named pipe fallback for unsupported systems
- Compression support for large messages
- Encryption for sensitive data
- Distributed tracing integration
- Unity/Godot engine support
- Web Assembly (WASM) compatibility
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Inspired by various IPC libraries across different platforms
- Thanks to all contributors who have helped shape Selena
- Special thanks to the .NET community for feedback and support
📞 Support
- 📧 Email: taiizor@vegalya.com
- 💬 Discord: Join our community
- 🐛 Issues: GitHub Issues
- 📖 Wiki: GitHub Wiki
<div align="center"> Made with ❤️ by the Selena Community </div>
| 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.0)
-
.NETStandard 2.1
- System.Text.Json (>= 10.0.0)
-
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.