Ara3D.DataTable
1.6.1
dotnet add package Ara3D.DataTable --version 1.6.1
NuGet\Install-Package Ara3D.DataTable -Version 1.6.1
<PackageReference Include="Ara3D.DataTable" Version="1.6.1" />
<PackageVersion Include="Ara3D.DataTable" Version="1.6.1" />
<PackageReference Include="Ara3D.DataTable" />
paket add Ara3D.DataTable --version 1.6.1
#r "nuget: Ara3D.DataTable, 1.6.1"
#:package Ara3D.DataTable@1.6.1
#addin nuget:?package=Ara3D.DataTable&version=1.6.1
#tool nuget:?package=Ara3D.DataTable&version=1.6.1
Ara3D.DataTable
This is a high-performance alternative to using System.Data.
It is a set of interfaces for use with in-memory columnar databases or ECS (Entity Component System) architecture.
What is a Columnar Database
In traditional object-oriented approaches large amounts of data are stored as collections of objects or structs. This is also referred to as the array-of-structs approach. This can be thought of as a collection of rows in a table.
The alternative to lists of objects is a column-oriented layout, also known as struct-of-arrays. The column-oriented approach is more efficient for in-memory processing, and allows for extremely efficient packing of the columns.
For more information see:
- Apache Parquet - column oriented file format
- Apache Arrow - column oriented in memory database
Design
Ara3D.DataTable is primarily a simple set of interfaces, that allows a unified method of working with columnar data in memory or serialized from disk.
It is the basis of other libraries that might do compression, (de-)serialization, queries, conversion to-from different formats, and transporting data to/from relational databases or object-relational mapping (ORM).
Example Use Case
At Ara 3D we use this library to create efficient code for working with BIM data associated with large AEC models.
Interfaces
IDataSet- A collection ofIDataTableobjects.IDataTable- A collection ofIDataColumnobjects.IDataRow- A collection of values for a single row (usually created on demand)IDataColumn- A buffer of unmanaged values for a single column.IDataDescriptor- A set of column descriptors (type, name)
Builder Helper Classes
DataTable comes with a set of builder classes to make it easy to construct simple object tables in memory incrementally that satisfy the interfaces. These classes are not optimized for performance, but instead designed for simple use cases.
DataSetBuilderDataTableBuilderDataRowBuilderDataColumnBuilder
No type checking is done on objects passed into table builder.
Motivation
This library has many parallels to System.Data, but there are several issues with using System.Data classes like DataSet and DataTable directly.
| Issue | Impact in a real‑time viewer |
|---|---|
| Memory overhead | Each DataRow is a full object with boxing for value types, versioning arrays, and two hash tables |
| GC pressure | Per‑row allocations plus frequent ColumnChanged events drive Gen‑0/1 churn; stalls become visible at frame‑times < 16 ms. |
| Weak typing | weakly‑typed columns (object cells) kill inlining, require casts, and move many errors to runtime. |
| No columnar access | Many analytics scan rows sequentially; CPUs love structure‑of‑arrays, not array‑of‑structures. |
| Thread‑safety locks | DataTable internally synchronises; fine for editor‑thread, harmful if your physics or analysis jobs touch the same table. |
| Limited relational modelling | Cross‑table constraints exist, but traversing n‑level object graphs is verbose and slow compared with a proper ORM or ECS. |
| Versioning you don’t need | Proposed/Current values cost memory even if you never call BeginEdit. Can’t switch them off. |
| Complexity | DataTable is a complex object with many properties and events. It’s hard to understand and use correctly. |
We created Ara3D.DataTable to handle large amounts of relational data in memory efficiently.
Dependencies
This project is built using .NET 8 and has no dependencies.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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 was computed. 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 was computed. 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. |
-
net8.0
- Ara3D.Collections (>= 1.6.1)
- Ara3D.PropKit (>= 1.6.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Ara3D.DataTable:
| Package | Downloads |
|---|---|
|
Ara3D.BimOpenSchema
Package Description |
|
|
Ara3D.SDK.Core
Low-level cross-platform foundation packages for Ara 3D SDK applications. |
|
|
Ara3D.Studio.API
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.6.1 | 183 | 7/3/2026 |