Documentation

Performance Benchmark

Article author
Admin
  • Updated

We tested the parsing and validation speed (using .NET Stopwatch) and memory allocation of the .NET Core 3.1 version of EDI Tools for .NET.

Download EdiFabric EDI Tools (including local NuGet packages and DLLs)

Download EdiFabric EDI Tools from GitHub

 

Prerequisites

  • Configure the Template for splitting

    We did two tests for parsing and validation of the large file - with and without splitting. Following the steps in the Parsing large EDI files article, the [Splitter] attribute was added to the 2000 Loop in 835's template:

    [Splitter]
    [DataMember]
    [Required]
    [Pos(7)]
    public virtual List<Loop_2000_834> Loop2000 { get; set; }

    In code, set Split = true to enable splitting, and Split = false to disable it.

  • Small file

    Download the file, that contains a single X12 5010 834 message with 2 employee enrollments. 

  • Large file

    Download the file, that contains a single X12 5010 834 message with 100 000 employee enrollments.

  • System Setup

    EdiFabric.10.1.0

    BenchmarkDotNet=v0.12.0

    OS=Windows 10.0.18363

    Intel Core i7-9700 CPU 3.00GHz, 1 CPU, 8 logical and 8 physical cores

    .NET Core SDK=3.1.402

    [Host] : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

 

Test the parsing speed

The code:

public static void Run()
{
   Stopwatch watch = Stopwatch.StartNew();
   var edi = File.OpenRead(@"C:\Hipaa_834_Large.txt");
   using (var ediReader = new X12Reader(edi, "EdiFabric.Templates.Hipaa", 
new X12ReaderSettings { Split = false })) { while (ediReader.Read()) { } } watch.Stop(); Console.Write(watch.ElapsedMilliseconds); Console.ReadKey(); }

The results:

Test Elapsed Allocated at start Allocated at end
Small file 125 ms 1 MB 25 MB
Large file 44 s 1 MB 347 MB
Large file with splitting 48 s 1 MB 25 MB

 

Test the validation speed

The code:

public static void Run()
{
var validation = new List<Task<Tuple<bool, MessageErrorContext>>>(); Stopwatch watch = Stopwatch.StartNew(); var edi = File.OpenRead(@"C:\Hipaa_834_Large.txt"); using (var ediReader = new X12Reader(edi, "EdiFabric.Templates.Hipaa",
new X12ReaderSettings { Split = false })) { while (await ediReader.ReadAsync())
{
MessageErrorContext mec;
var msg = ediReader.Item as TS834;
if (msg != null)
{
validation.Add(msg.IsValidAsync());
}
} }
Task.WaitAll(validation.ToArray()); watch.Stop(); Console.Write(watch.ElapsedMilliseconds); Console.ReadKey(); }

The results:

Test Elapsed Allocated at start Allocated at end
Small file 152 ms 1 MB 25 MB
Large file 2 min 52 s 1 MB 3 GB
Large file with splitting 58 s 1 MB 136 MB

 

How to test my own files?

To evaluate your own files head on to the Demo project in each solution, and change the path to a local file on your machine.

Share this:

Was this article helpful?

Comments

0 comments

Please sign in to leave a comment.