Страница 1 из 1
Ошибка при параллельном построении отчетов
Добавлено: 29 дек 2022, 16:00
Ингвар
На версии 2023.1.2 при одновременном построении нескольких отчетов периодически вылетает ошибка:
Код: Выделить всё
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
at Stimulsoft.Drawing.FontFamily.CreateSixFont(Single sizeInPoints, FontStyle style)
at Stimulsoft.Drawing.Font..ctor(FontFamily family, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont)
Проблема при изменении Dictionary из разных потоков. Просьба сделать функцию CreateSixFont потокобезопасной.
Re: Ошибка при параллельном построении отчетов
Добавлено: 30 дек 2022, 12:15
Aleksey
Здравствуйте,
Необходимо время для анализа.
Спасибо.
Re: Ошибка при параллельном построении отчетов
Добавлено: 30 дек 2022, 20:41
Aleksey
Здравствуйте,
Вышлите простой пример проекта. Не получается воспроизвести, возможно что-то не учитываем.
Спасибо.
Re: Ошибка при параллельном построении отчетов
Добавлено: 09 янв 2023, 10:23
Ингвар
Я ведь указал на конкретную проблему в исходном коде. В функции CreateSixFont используется static Dictionary, который может меняться из разных потоков, что приводит к ошибке. Самое простое решение - добавить lock. Вот полный стек вызовов:
Код: Выделить всё
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
at Stimulsoft.Drawing.FontFamily.CreateSixFont(Single sizeInPoints, FontStyle style)
at Stimulsoft.Drawing.Font..ctor(FontFamily family, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont)
at Stimulsoft.Report.Chart.StiChartTitle..ctor()
at Stimulsoft.Report.Chart.StiChart..ctor(RectangleD rect)
at Stimulsoft.Report.Chart.StiChart..ctor()
at Stimulsoft.Report.Chart.StiChart.CreateNew()
at Stimulsoft.Report.Components.StiComponentsCollection.LoadFromJsonObject(JObject jObject)
at Stimulsoft.Report.Components.StiContainer.LoadFromJsonObject(JObject jObject)
at Stimulsoft.Report.Components.StiPanel.LoadFromJsonObject(JObject jObject)
at Stimulsoft.Report.Components.StiPage.LoadFromJsonObject(JObject jObject)
at Stimulsoft.Report.Components.StiPagesCollection.LoadFromJsonObjectInternal(JObject propJObject)
at Stimulsoft.Report.Components.StiPagesCollection.LoadFromJsonObject(JObject jObject)
at Stimulsoft.Report.StiReport.LoadFromJsonInternal(Stream stream)
at Stimulsoft.Report.SaveLoad.StiJsonReportSLService.Load(StiReport report, Stream stream)
at Stimulsoft.Report.StiReport.Load(StiReportSLService service, Stream stream)
at Stimulsoft.Report.StiReport.Load(Stream stream)
at Stimulsoft.Report.StiReport.Load(String path)
Re: Ошибка при параллельном построении отчетов
Добавлено: 09 янв 2023, 18:47
Ivan
Здравствуйте.
Я ведь указал на конкретную проблему в исходном коде. В функции CreateSixFont используется static Dictionary, который может меняться из разных потоков, что приводит к ошибке. Самое простое решение - добавить lock.
Данная доработка уже сделана, будет включена в следующий билд.
Однако мы не можем воспроизвести исходную проблему, поэтому не можем гарантировать, что проблема полностью решена.
Как показывает практика, на проектах пользователей иногда проявляются очень неожиданные нюансы.
Поэтому для тестирования желательно присылать тестовые проекты, на которых можно гарантированно воспроизвести проблему и убедиться в правильности её решения.
Спасибо.
Re: Ошибка при параллельном построении отчетов
Добавлено: 09 янв 2023, 19:22
Ингвар
Спасибо за исправление! Пример с отчетом к сожалению прислать не могу, но если будет что-то подобное проявляться на новой версии, то напишу.
Re: Ошибка при параллельном построении отчетов
Добавлено: 10 янв 2023, 11:02
Aleksey
Здравствуйте,
Пожалуйста.