Performance Benchmarks

GnuplotEx is designed for high performance with large datasets and parallel rendering.

Large Dataset Performance

Binary mode significantly outperforms text mode for large datasets.

Large Dataset Benchmark

Recommendation: Use binary: true for datasets larger than 50K points.

# Large dataset with binary mode
data = for i <- 1..1_000_000, do: [i, :math.sin(i / 1000)]

GnuplotEx.scatter(data, binary: true)
|> GnuplotEx.title("1M Points")
|> GnuplotEx.to_png("/tmp/large.png")

Parallel Rendering

Render multiple plots concurrently with render_many/3 for significant speedups.

Parallel Benchmark

# Render 50 plots in parallel
plots = for i <- 1..50 do
  data = for x <- 1..1000, do: [x, :math.sin(x / 100 + i)]
  GnuplotEx.line(data, label: "Series #{i}")
end

# Sequential
results = Enum.map(plots, &GnuplotEx.render(&1, :svg))

# Parallel (much faster)
results = GnuplotEx.render_many(plots, :svg)

# Control concurrency
results = GnuplotEx.render_many(plots, :svg, max_concurrency: 4)

Async Rendering

Use render_async/3 for non-blocking renders in concurrent applications.

# Start render without blocking
task = GnuplotEx.render_async(plot, :svg)

# Do other work...
Process.sleep(100)

# Get result when needed
{:ok, svg} = Task.await(task)

Running Benchmarks

Run benchmarks on your system:

mix bench              # Run all benchmarks
mix bench --large      # Large dataset benchmark only
mix bench --parallel   # Parallel rendering benchmark only