Click here to Skip to main content
12,944,138 members (52,189 online)
Click here to Skip to main content
Add your own
alternative version


33 bookmarked
Posted 27 Jul 2014

Comparing .NET chart solutions for web-applications

, 5 Aug 2014 CPOL
Rate this:
Please Sign up or sign in to vote.
In this article collected most popular freeware/commercial solutions for data visualization in .NET


After long years passed releasing ASP .NET, community amassed a whole banch of various solutions for data visualization for any taste and budget: free, commecial, self-developed etc. They all work in different way, have no interoperable interfaces, use different architecture. performance and layout. So looking for the best choise developer often stops on first more or less suitable, because he has not enough time for complete investigation.

This article tries to collect all available solutions in one place, compare their performance, provide short summary and supply simplest usage examples. Also, it introduces quick guide which explains technical implementation of test application, since it may be interesting for beginners.


Some time ago I had been assigned to the task - re-work existing chart solution for RDLC report, because it worked too slow on a large amount of data. It was expected, that newly introduced solution should be separated from RDLC, and just render image to file or stream, so it can be used elsewhere. I needed to investigate existing solutions and examine them for speed, flexibility, customization etc. Most of these properties are immeasurable, except of speed. So working on the task, I compared performance of most popular free/commercial solutions and want to share results with public

Quick overview

Technically I run each solution on fixed amount of data with random values. To minimize inaccuracy it had been done in several iterations. Default settings for each chart weren't changed. I agree that it may not be completelly reliable approach, but I saw no alternative way.

Here is the list of chart solutions that were included to the overview:

Not to waste your time, I bring performance test results right here:

SolutionLicenseIteration amountTotal time(sec)Averege time(sec)
1Zed GraphFree102.2810.2281
2Dislin Free102.5910.2591
5Oxy PlotFree104.0910.4091
6Web Chart Free104.3050.4305
7Microsoft Chart ControlsFree104.3530.4353
8Chart FXCommercial105.30.53
12Tee chartsCommercial1010.0041.0004
13Telerik chartsCommercial1011.4961.1496
15Open minded plotFree1013.0341.3034
16Google Sharp chartingFree1014.121.412

Testing was conducted on PC with next configurations: Intel Core I5 3.10 GHz, 8gb ОЗУ, NVIDIA GeForce GT 520, Windows 7 x64. Results may be different on your PC.

I try not to give my own opinion about each particular solution, cause it may be nonobjective or I just lack experience in using it. Only general information:

  • DisLin - cross-platform (UNIX, Linux, FreeBSD, OpenVMS, Windows, Mac OSX и MS-DOS), fast, has ports to numerous languages (C, C++, Fortran 77, Fortran 90, Perl, Python, Ruby, Tgl, GCL, C#).
  • Google Chart Sharp - C# wrapper on Google Chart API. Has limitation on 50000 calls per day. May work slow due to network bandwidth.                                  
  • Microsoft Chart Controls - official native chart solution from Microsoft. As plus - widely used, and well-documented.                                                       
  • NPlot - open-source. Works pretty fast comparing to other solutions.
  • OxyPlot - cross-platform, open-source. Widely used comparing to other free some. Has controls for WPF, Silverlight, Windows Phone, Windows 8 Metro, Xamarin.
  • ZedGraph - fastest solution (on default installation). Open-source. Has controls for ASP .NET and Windows Forms.                                                                                                                                
  • WebChart - old and closed (as far as I can see) solution. But still stable and may be helpfull for someone.
  • OpenMinded - 'dark horse' of my classification. Slow and little-known, but looks pretty.
  • Chart Fx - commecial solution. According to documentation supports .NET, Java, HTML5, COM, WPF, Silverligth, Sql Reporting Services.                                                                                
  • DevExpress - widely-spread commercial solution. Hold huge amount of controls. Supports WinForms, ASP.NET, ASP MVC, WPF, Windows Forms, Silverlight, Windows 8. The only thing - I did not manage to render web chart to the image, so I used WinForms control. Works slower than biggest part of other solutions.                               
  • Telerik - another widely-spread commercial solution that has whole banch of various controls for cross-platform development. Use different technologies, one of the slowest solution.
  • Chart director - fast commercial solution. Has ports to  .NET, Java, ASP, COM, VB, PHP, Perl, Python, Ruby, ColdFusion, C++.                                                   
  • ILNumerics - mathematic library developed exclusiverly for .NET. Commercial. Medium performance.
  • Tee chart - commercial solution. Has ports to Java, ActiveX / COM, PHP and Delphi VCL / FireMonkey. Less than average performance.                                         
  • dotnetCharting - commercial solution. Has easy programming interface and rich functionality.               
  • Infragistics - commercial solution. Nice and easy-to-use, but relatively slow.

As you see, free solutions often works faster than their commercial contenders, but may have less customization parameteres and of cource no official support. 

Implementation details

My goal was to hide implementation of each chart solution under some abstract entity, so I could measure performance programmatically. Also, since I can't ship commercial solutions because of license, I needed some architechture that let me include them in project dinamically. 

This goal was achieved by taking out each 'adapter' for chart solution into separate assembly. Generally, component diagramm looks like on the image bellow:

All base classes and interfaces introduced in ChartingCore.dll assembly, to let web application and particular adapters to share code. It contains definitions for next interfaces (and appropriate base classes):

public interface IChartFactory
    IChartAdapter GenerateChart(ChartParameters parameters);
    string ChartTypeName { get; }
    string DownloadLink { get; }
    SolutionType SolutionType { get; }
    Guid Id { get; }
    public interface IChartAdapter
        Image CreateChartImage();
        IChartFactory Owner { get; set; }
    public enum SolutionType

Than, each assembly for every solution must impelement this interfaces. E.g., as it was done for Google Chart Sharp:

/// <summary>
/// Apache License 2.0
/// Official link -
/// </summary>
public class GoogleSharpAdapter : BaseChartAdapter
    public GoogleSharpAdapter(ChartParameters parameters)
        : base(parameters)

    protected override Image DoCreateChartImage()
        var chart = new LineChart(Parameters.ChartWidth, Parameters.ChartHeight);
        chart.SetData(Parameters.SeriaData.Select(t => new float[]{t.Key, t.Value}).ToList());
        var webClient = new WebClient();
        byte[] imageBytes = webClient.DownloadData(chart.GetUrl());
        return new Bitmap(new MemoryStream(imageBytes));
/// <summary>
/// Open Source
/// </summary>
public class GoogleSharpChartFactory: BaseChartFactory
    protected override IChartAdapter DoGenerateChart(ChartParameters parameters)
        return new GoogleSharpAdapter(parameters);

    public override string ChartTypeName
        get { return "Google Sharp charting"; }

    public override string DownloadLink
        get { return ""; }

    public override SolutionType SolutionType
        get { return SolutionType.Free; }

Then I used Spring Framework for .NET to load assemblies to the web application dinamically. In this application, information about required assemblies and classes located at SpringContext.xml file:

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="">
    <object name="CurrentFactoriesCollection" type="FreeChartTools.FactoriesCollection, FreeChartTools, Version=, Culture=neutral">
            <list element-type="ChartingCore.IChartFactory, ChartingCore, Version=, Culture=neutral">
                <!--Free && Open source solutions-->
                <ref object="DisLinChartingFactory"/>
                <ref object="GoogleSharpChartingFactory"/>
                <ref object="MsChartingFactory"/>
                <ref object="NPlotChartFactory"/>
                <ref object="OxyPlotChartFactory"/>
                <ref object="WebChartControlFactory"/>
                <ref object="ZedGraphChartFactory"/>
                <ref object="OpenMindedPlotFactory"/>

                <!--Commercial && Proprietary solutions-->
                <ref object="ChartFxFactory"/>
                <ref object="DevExpressFactory"/>
                <ref object="TelerikFactory"/>
                <ref object="TeeChartFactory"/>
                <ref object="ChartDirectorFactory"/>
                <ref object="ILNumericsFactory"/>
                <ref object="DotnetChartFactory"/>
    <!--Free && Open source solutions-->
    <object name="DisLinChartingFactory" type="FreeChartTools.FreeCharting.DisLinCharting.DislinChartFactory, FreeChartTools, Version=, Culture=neutral" singleton="false" />
    <!--Commercial && Proprietary solutions-->
    <object name="ChartFxFactory" type="ChartFXCharting.ChartFxFactory, ChartFXCharting, Version=, Culture=neutral" singleton="false" />

As I mentioned before all free assemblies included to solution. But since I can't do the same to commercial solutions, you may see next image on UI for some, that are not installed on your PC once you try to render it:

If you wanna test commercial you must download them from appropriate link (i've provided links for each solution and showed them right on the UI).

You can test each solution on your PC, or compare performance for all charts. User interface is quite simple:

  1. You can run test for one selected solution (for example, you want to perform test-drive for some attracting solution right on fly, modifying existing code). Select solution and press 'Check'.
  2. You can configure each solution for your needs, and compare performance with parameters that you are interested in. Select amount of iterations for testing and press 'Compare all solutions'.

If I missed some interesting chart solution, that can be used in .NET - just let me know, and I'll try to include it as soon as possible. Or, since this project also available at GitHub (, you can make these changes by yourself.


30.07.14 - introduced dotnetCharting solution to the article and sources.

04.08.14 - introduced Infragistics solution to the article and sources. All images hosted on CodeProject servers.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Ivan Perevernykhata
Software Developer Unwind Technology
Ukraine Ukraine
No Biography provided

You may also be interested in...


Comments and Discussions

QuestionDevexpress Charts Pin
ScottBrady10-May-16 15:45
memberScottBrady10-May-16 15:45 
Questiondifferences in results Pin
Buratino2k8-Oct-15 1:57
memberBuratino2k8-Oct-15 1:57 
QuestionTeeChart in 3D? Pin
Member 829245819-Nov-14 4:07
memberMember 829245819-Nov-14 4:07 
AnswerRe: TeeChart in 3D? Pin
Ivan Perevernykhata19-Nov-14 4:16
memberIvan Perevernykhata19-Nov-14 4:16 
QuestionPerfect! Pin
sidedefence6-Nov-14 12:25
membersidedefence6-Nov-14 12:25 
AnswerRe: Perfect! Pin
Ivan Perevernykhata6-Nov-14 20:39
memberIvan Perevernykhata6-Nov-14 20:39 
GeneralMy vote of 5 Pin
Mihai MOGA13-Aug-14 3:24
professionalMihai MOGA13-Aug-14 3:24 
GeneralRe: My vote of 5 Pin
rikkiua13-Aug-14 4:45
memberrikkiua13-Aug-14 4:45 
Suggestion[My vote of 2] Suggestions to make this article better Pin
mahendren6-Aug-14 3:01
membermahendren6-Aug-14 3:01 
GeneralRe: [My vote of 2] Suggestions to make this article better Pin
rikkiua6-Aug-14 3:23
memberrikkiua6-Aug-14 3:23 
GeneralRe: [My vote of 2] Suggestions to make this article better Pin
mahendren6-Aug-14 21:18
membermahendren6-Aug-14 21:18 
GeneralRe: [My vote of 2] Suggestions to make this article better Pin
rikkiua6-Aug-14 21:36
memberrikkiua6-Aug-14 21:36 
QuestionDon't forget Infragistics Pin
PSU Steve1-Aug-14 6:01
memberPSU Steve1-Aug-14 6:01 
AnswerRe: Don't forget Infragistics Pin
rikkiua2-Aug-14 3:11
memberrikkiua2-Aug-14 3:11 
GeneralAmazing collection of chart controls Pin
bssrini30-Jul-14 12:58
memberbssrini30-Jul-14 12:58 
QuestionBest Charting Control Pin
vinodajacob30-Jul-14 8:14
membervinodajacob30-Jul-14 8:14 
AnswerRe: Best Charting Control Pin
rikkiua30-Jul-14 9:46
memberrikkiua30-Jul-14 9:46 Charting? Pin
jtmueller29-Jul-14 11:24
memberjtmueller29-Jul-14 11:24 
AnswerRe: .net Charting? Pin
rikkiua29-Jul-14 20:58
memberrikkiua29-Jul-14 20:58 
AnswerRe: .net Charting? Pin
rikkiua30-Jul-14 9:42
memberrikkiua30-Jul-14 9:42 
QuestionFree 3D Chart Pin
firmwaredsp28-Jul-14 4:49
memberfirmwaredsp28-Jul-14 4:49 
GeneralMy vote of 3 Pin
ewebbi28-Jul-14 4:33
memberewebbi28-Jul-14 4:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170518.1 | Last Updated 5 Aug 2014
Article Copyright 2014 by Ivan Perevernykhata
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid