ZeroData is a blazing-fast, zero-allocation columnar DataFrame and streaming data analytics engine for .NET with zero external dependencies. Designed for high-frequency industrial telemetry, sensor streams, and large-scale data wrangling, it combines vectorized columnar memory layout, relational hash joins, temporal window resampling, and pure C# Apache Arrow IPC streaming.
- Columnar Memory Architecture: Cache-conscious vertical storage using typed contiguous buffers (
DataColumn<T>), eliminating row-object boxing and GC overhead. - Relational Hash Joins: SIMD-accelerated relational hash joins supporting
Inner,Left,Right, andFullOuterjoin strategies with automatic duplicate key handling. - Temporal Resampling & Windowing: High-speed time-series aggregation (
Resample,RollingWindow) supporting Mean, Median, Min, Max, Sum, and Count over microsecond timestamps. - Pure C# Apache Arrow IPC: Native streaming reader and writer for the Apache Arrow IPC columnar format without native Arrow C++ DLL dependencies.
- Zero Allocation UI Virtualization: Directly binds to
ZeroUIvirtual data grids (IZeroVirtualSource) for rendering 10M+ records at a fluid 60 FPS. - Zero External Dependencies: Standard .NET runtime only.
Install via the .NET CLI:
dotnet add package ZeroData.Coreusing ZeroData.Core;
var df = new DataFrame();
df.AddColumn("Timestamp", new DateTime[] { DateTime.UtcNow, DateTime.UtcNow.AddSeconds(1) });
df.AddColumn("Temperature", new double[] { 72.4, 73.1 });
df.AddColumn("Status", new string[] { "OK", "WARN" });
Console.WriteLine($"Rows: {df.RowCount}, Columns: {df.ColumnCount}");var left = new DataFrame();
left.AddColumn("Id", new int[] { 1, 2, 3 });
left.AddColumn("Part", new string[] { "Gear", "Shaft", "Bearing" });
var right = new DataFrame();
right.AddColumn("Id", new int[] { 1, 2, 4 });
right.AddColumn("Price", new double[] { 12.5, 45.0, 8.2 });
// Perform Inner Join on 'Id'
var joined = left.Join(right, "Id", JoinType.Inner);
Console.WriteLine($"Joined RowCount: {joined.RowCount}");// Downsample high-frequency 1000Hz sensor data to 1-second intervals (Mean aggregation)
var resampled = df.Resample("Timestamp", TimeSpan.FromSeconds(1), AggregationType.Mean);Tested on Intel Core i7-13700K (1 Million Rows, Release x64):
| Operation | Throughput | Elapsed Time | Memory Allocations |
|---|---|---|---|
| Column Scan & Filter | 0 bytes | ||
| Relational Hash Join ( |
|
||
| Temporal Resampling ( |
Continuous buffer | ||
| Arrow IPC Serialize ( |
Linear stream |
MIT License © 2026 Phong Võ. Part of the ZeroPlatform project.