Мы используем Stimulsoft Reports Web 2016.2.6.
Для построения отчетов мы используем StiMvcViewer, вот примерный код:
Код: Выделить всё
@Html.Stimulsoft().StiMvcViewer(
viewerName,
new StiMvcViewerOptions
{
Actions =
{
GetReportSnapshot = "GetReportSnapshot",
ViewerEvent = "ViewerEvent",
ExportReport = "ExportReport"
}
, Appearance =
{
ScrollbarsMode = true,
ShowTooltips = false
}
, Localization = "~/Views/Shared/Reporting/Localization/ru.xml"
, Toolbar =
{
ShowDesignButton = false,
}
, Server =
{
Controller = "StiView",
RequestTimeout = Model.Timeout,
UseRelativeUrls = true,
PassQueryParametersForResources = false
}
,
Height = Unit.Percentage(100.0)
})
Код: Выделить всё
public ActionResult ViewerEvent()
{
return StiMvcViewer.ViewerEventResult(HttpContext);
}
viewtopic.php?t=4192
Теперь мы усложнили условия тестирования, сейчас у нас 250 одновременно приходящих новых пользователей (кэш браузера чист) строят разные отчеты, их у нас штук 20.
И мы заметили, что запрос
http://test-serv/StiView/ViewerEvent?mv ... =2016.2.6
сильно тормозит сервер.
Мы провели дополнительные изыскания, и нам показалось, что надо результаты выполнения этого запроса кэшировать на сервере.
Выяснилось, что в версии с серверным кешированием отчеты работают быстрее примерно в 10 раз. Также примерно в 3 раза ускоряется работа пользователей с другими частями приложения. В тесте через отчеты проходит примерно 250 виртуальных абонентов из общего числа 1250. Кеширование в их браузерах включено, но изначально кеш пуст. Т.е. всего 250 запросов к скриптам стимулсофта многократно замедляют работу, причем не только отчетов, но и других страниц.
Мое предположение, что инъектирование в скрипт текстовых зависящих от локали ресурсов (параметр mvcviewer_loc) не кешируется у Вас и замедляет формирование скрипта. Возможно, имеет смысл ввести в Вашем коде (StiMvcViewer или ниже) по умолчанию кеширование сформированного JavaScript для каждой локали.
Также, при этих тестах мы неоднократно получали такую ошибку:
Код: Выделить всё
Type : System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Ссылка на объект не указывает на экземпляр объекта.
Source : Stimulsoft.Base
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : Void Add(System.String, System.String, System.String)
HResult : -2147467261
Stack Trace : в Stimulsoft.Base.Localization.StiLocalization.Add(String category, String key, String value)
в Stimulsoft.Base.Localization.StiLocalization.LoadInternal(Stream stream)
в Stimulsoft.Base.Localization.StiLocalization.LoadDefaultLocalization()
в Stimulsoft.Base.Localization.StiLocalization.Load(Stream stream)
в Stimulsoft.Base.Localization.StiLocalization.Load(String file)
в Stimulsoft.Report.Mvc.StiCollectionsHelper.GetLocalizationItems(String path)
в Stimulsoft.Report.Mvc.StiResourcesHelper.GetViewerCollections(String theme, String loc)
в Stimulsoft.Report.Mvc.StiResourcesHelper.GetViewerScripts(String id, String theme, String loc)
в Stimulsoft.Report.Mvc.StiResourcesHelper.Get(StiJavascriptParameters jsParams)
в Stimulsoft.Report.Mvc.StiMvcViewer.ViewerEventResult(HttpContextBase httpContext, StiReport report, Boolean detectActionResult)
в lambda_method(Closure , ControllerBase , Object[] )
С уважением,
Дмитрий.