Benchmark Performance for ComponentOne WPF FlexPivot and C1DataEngine

Our WPF FlexPivot control offers a wide range of implementations to help you filter down data based on different criteria or tags. Still, one aspect commonly overlooked is how grid load times can vastly improve based on how the dataset is loaded.

In this blog, we’ll be exploring how the standard System.DataTable compares to C1DataEngine as a means of loading increasingly larger datasets into the ComponentOne .NET 6 WPF FlexPivot control.

This data will be compared by load time, and all the information gathered here was collected on our local machine. The code comes from our DataEngine sample within the FlexPivot Explorer, which you can download directly from our GitHub here if you would like to take a look.

Background on C1DataEngine

Before getting into the details, we’d like to provide some background on how the C1DataEngine works while touching on some of its additional benefits. For starters, with the exception of our ActiveX and ASP.NET Web Forms controls, C1DataEngine is available for use within every edition of controls we offer, including WinForms, WPF, Blazor, and more.

In the most basic sense, C1DataEngine acts as a medium between your datasets and the control (think grid, chart, or table) you wish to feed that data into. To be more precise, C1DataEngine is a standalone .NET library that delivers high-performance analytics for large datasets. What makes C1DataEngine so beneficial to use is the in-memory caching technology it provides, which allows for faster extraction, transformation, and loading of large and complex datasets. Once the data is loaded, this equates to querying millions of records in less than a second. Additionally, C1DataEngine can be used in .NET Core, .NET Framework, .NET 5, and .NET 6.

Performance Results

That’s enough background information; let’s dive into the performance! So how does dataset loading with C1DataEngine compare to using the standard System.DataTable when working with the WPF FlexPivot control? Let’s break the comparisons down by number of records loaded. With 100,000 records loaded, the WPF FlexPivot control looks like this:

The following table demonstrates the time performance when loading in a System.DataTable vs. a C1DataEngine object to a WPF FlexPivot grid:

 

Row Count

Load-time (seconds)

System.DataTable

100,000

2.17

 

500,000

10.74

 

1,000,000

24.39

C1DataEngine

100,000

0.26

 

500,000

0.35

 

1,000,000

0.60

 

5,000,000

2.24

In a contest of time performance, incorporating the C1DataEngine clearly surpasses the standard, barebones System.DataTable implementation. As the datasets being loaded increased in size, the System.Data.DataView update time increased exponentially. Doubling the dataset from 500,000 records to 1,000,000 records made the update time rise from 10.74 seconds to 24.39 seconds – over double!

In comparison, doubling the dataset within the C1DataEngine impacted its load time by less than double, going from 0.35 seconds to 0.60 seconds – a fourth of a second increase. Just for fun, we tested the time to load five million records via the C1DataEngine object into the FlexPivot control and added the results to the end of the table above.

C1DataEngine can update the 5,000,000 record table in an impressive 2.24 seconds, demonstrating a sublinear time complexity when factoring in that the sample size increased by five-fold.

To begin working with our WPF FlexPivot or C1DataEngine control, visit our website and download a free 30-day trial of our full control suite.

 

comments powered by Disqus