Средства построения графиков для .NET

в 20:38, , рубрики: .net, ASP, визуализация данных, графики и диаграммы, сравнение производительности, метки: , ,

Средства построения графиков для .NET
Не так давно пришлось столкнуться с тривиальной задачей — найти решение, которое позволит рендерить рисунки графиков для .NET. Сразу оговорюсь, что меня интересовали только линейные графики. Камнем преткновения, который подтолкнул к переделыванию уже существующего решения (это были графики, встроенные в rdlc отчеты), было быстродействие. В целом, к искомому решению были предъявлены такие требования:

  1. Необходимо оставить данную оптимизацию незамеченной для конечного пользователя, следовательно, решение должно быть широко настраиваемым, чтобы, в конечном счете, выглядеть так же, как и предшественник.
  2. Работать быстро (ну понятно, пользователи не любят ждать).
  3. Желательно, быть бесплатным или с открытым исходным кодом. Покупка не стала бы большой проблемой, найди я отличное платное решение, но начать лучше с open source.

Что было сделано?

Погуглив, выяснилось, что существует достаточно много вариантов для решения данной задачи, и все они достаточно сильно отличаются по многим параметрам (размер сообщества, скорость работы, удобство). В процессе выбора решения было опробовано 7 бесплатных вариантов:

  • DisLin. Кроссплатформенная библиотека (UNIX, Linux, FreeBSD, OpenVMS, Windows, Mac OSX и MS-DOS). Чрезвычайно мощная, гибкая, действительно стоит того, чтобы написать отдельную статью только о ней. Может быть, немного уступает своим конкурентам по степени читабельности кода (использует классический функциональный подход), но зато, благодаря этому, может быть легко портирована практически на любой язык. Имеет ванильные торты порты на C, C++, Fortran 77, Fortran 90, Perl, Python, Ruby, Tgl, GCL (порт на C# — обычная библиотека с импортированными функциями). Бесплатная для некоммерческого использования.
    Средства построения графиков для .NET
  • Google Chart Sharp. Обертка над Google Chart API для С#. На хабре уже были статьи о нем, поэтому в двух словах: бесплатный (с ограничением 50000 тыс. вызовов в день), работает очень шустро, присутствуют основные параметры для кастомизации. Среди плюсов: возможность использовать везде, где есть подключение к интернету, независимость от используемого языка / ОС. Основной минус — это, естественно, дополнительный round-trip данных по сети (если график Вам нужен ещё на сервере), что замедляет процесс.
    Средства построения графиков для .NET
  • Microsoft Chart Controls. Нативный функционал от Microsoft, который был представлен общественности в далеком 2008 году. К тому времени уже существовал ряд решений от сторонних разработчиков, но это не помешало Ms Chart Controls быстро завоевать популярность среди разработчиков. И не удивительно, ведь они поставлялись с .NET framework, имели удачную архитектуру, были легко настраиваемыми и привлекательными на вид. По скорости уступают остальным, но, тем не менее, работают тоже вполне прилично.
    Средства построения графиков для .NET
  • NPlot. Ещё одна open source библиотека. Правда, не самая быстрая и популярная — информацию по ней можно найти в Интернете, хотя и не так много, как, например, по Microsoft Chart Controls. Тем не менее, поигравшись с ней, у меня осталось довольно приятное послевкусие.
    Средства построения графиков для .NET
  • OxyPlot. «Живой» кроссплатформенный open source, где можно даже зарепортить баг, на который, скорее всего, отреагируют. Доступен также в NuGet. Есть соответствующие контролы для WPF/Silverligth, WinForms, Metro. Плюшки, вроде экспорта напрямую в OpenXml и Pdf. Если Вам необходимо не «минутное» решение и возможность поправить его под себя, это решение для Вас.
    Средства построения графиков для .NET
  • ZedGraph. Также «живой» open source, прямой конкурент для OxyPlot. По количеству поддерживаемых платформ (только Windows) и технологий (только WinForms и ASP .NET) уступает ему, но очень симпатичный и один из самых быстрых. Отличный выбор, если Вам надо «просто красивый график» и больше ничего.
    Средства построения графиков для .NET
  • WebChart. Бесплатный предшественник Microsoft Chart Controls. Насколько я вижу, мертвый с 2004 года. У него чуть более убогий функционал в сравнении с остальными решениями, но, так как он имеет некоторые внешние отличия от остальных, может быть вполне полезен.
    Средства построения графиков для .NET

Ещё в самом начале я решил, что надо собрать как можно больше вариантов в одном месте и протестить их на быстродействие, а уже после этого было очень жалко выбрасывать в корзину проделанную работу. Поэтому было решено оформить эту статейку и выложить то, что получилось, на GitHub. Таким образом, если возникла необходимость, Вы можете настроить каждое решение под себя и сразу же его проверить. Лично мне очень не хватало такой статьи в начале. Может быть, исходники вызовут улыбку у гуру, но новичкам, которые только вникают в .NET и ASP, они однозначно будут очень полезны.
Для сравнения скорости работы берутся дефолтные настройки графика, указывается разрешение выходного рисунка и ему скармливается фиксированное количество точек. Каждое решение прогоняется несколько раз, и в качестве реальной скорости берется среднее. Опять же, это достаточно субъективно, и, если Вы можете предложить более красивый подход, я с интересом выслушаю.
На моем ПК (Intel Core I5 3.10 GHz, 8gb ОЗУ, Windows 7 x64) вышло следующее распределение скорости работы:

Решение Количество итераций Суммарное время (сек) Среднее время на одну итерацию (сек)
1 Dislin charts 5 1.9071907 0.38143814
2 Zed Graph 5 2.750275 0.550055
3 NPlot 5 3.1833183 0.63666366
4 Web Chart Control 5 5.130513 1.0261026
5 Microsoft Chart Controls 5 6.8456845 1.3691369
6 Oxy Plot 5 7.0067006 1.40134012
7 Google Sharp charting 5 9.8049804 1.96099608

Для различных входных параметров (разрешение изображения, количество точек на графике, параметры ПК, скорость интернета, фаза Луны и т.д.) результаты немного отличаются, поэтому Вы можете протестировать быстродействие у себя.
Я специально не делал глубокое сравнения фич и возможностей кастомизации, так как это довольно субъективная информация, которая сильно зависит от конкретной задачи. При необходимости, каждый желающий может провести полчаса, подебажить, посмотреть архитектуру решений, прикинуть, насколько легко их настроить под конкретные требования.
Если кто-то знает ещё бесплатные решения для графиков под .NET, которые пропущены в статье, — пишите в комментариях, и я постараюсь их добавить.

Автор: ivan_p

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js