Denis Gladkikh

outcoldman

My personal blog about software development

  • 22 Nov 2010
  • Developing, Libraries, Bug, Syncfusion
  • 0 comments

Как-то я поднимал уже тему про то, стоит ли покупать компоненты или может имеет смысл писать их самому. Хочется пожаловаться, просто накипело. Syncfusion меня очень сильно удивил. Есть у них библиотеки, включающие имя Web, ну, наверняка же, должно подразумеваться, что все классы, контролы должны уметь жить в многопоточной среде. А оказывается нет. В общем, хочу провести антирекламу Syncfusion. Я могу точно сказать – эти библиотеки покупать не стоит. Берут они, наверное, свое, только обилием количества решений, контролов, сред. Но, не стоит это тех денег, а особенно сил, которые нужно будет тратить на решения проблем.

Есть у них, например, библиотека для создания Pdf документов, но вот проблема, следующий код работать не будет.

static void Main(string[] args)
{    List<Thread> threads = new List<Thread>();
    for (int i = 0; i < 2; i++)
    {        var thread = new Thread((x) =>
                                    {                                        var report = new ReportClass();
                                    });        threads.Add(thread);
        thread.Start();
    }
     while (threads.Any(x => x.IsAlive))
    {
        Thread.Sleep(100);
    }
}
 class ReportClass
{
    private readonly PdfTrueTypeFont _firstPageFooterFont =        new PdfTrueTypeFont(new Font("Arial Narrow", 8.5f, FontStyle.Italic), true);
}

Падает в конструкторе PdfTrueTypeFont во втором потоке (первый прорабатывает отлично). Вот и все. Как такое возможно, у меня был шок. И ладно, если бы это был один случай. В этот же день нахожу другую проблему. Есть ChartWebControl, создаем 100 объектов этого типа в разных потоках, вызываем у каждого из них метод ChartWebControl.SaveImage(Stream stream, ImageFormat imageFormat) и получаем в одном из потоков, что объект используется. Вот это событие рандомное, может случиться, а может и не случиться. Оба бага Syncfusion уже приняла.

Как вам? Может быть, проблемы в каждом из контролов, классе. Я не знаю, на сервере мы используем только это. На клиенте (Silverlight) все попроще, там не многопоточная среда.

Зависело бы решение от меня: давно бы выкинул все, что связывает с Syncfusion с таким качеством продукта, но корни вросли уже. Эх, буду бороться дальше.

Comments