Ara3D.DataTable 1.6.1

dotnet add package Ara3D.DataTable --version 1.6.1
                    
NuGet\Install-Package Ara3D.DataTable -Version 1.6.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ara3D.DataTable" Version="1.6.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ara3D.DataTable" Version="1.6.1" />
                    
Directory.Packages.props
<PackageReference Include="Ara3D.DataTable" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ara3D.DataTable --version 1.6.1
                    
#r "nuget: Ara3D.DataTable, 1.6.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ara3D.DataTable@1.6.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ara3D.DataTable&version=1.6.1
                    
Install as a Cake Addin
#tool nuget:?package=Ara3D.DataTable&version=1.6.1
                    
Install as a Cake Tool

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:

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 of IDataTable objects.
  • IDataTable - A collection of IDataColumn objects.
  • 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.

  • DataSetBuilder
  • DataTableBuilder
  • DataRowBuilder
  • DataColumnBuilder

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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