可扩展性问题一直是主要Web应用程序的前沿和核心问题,如果可伸缩性对您的项目很重要,可能需要实现缓存策略。由于它与DevExpress Web Document Viewer相关,缓存将要求应用程序在缓存中存储临时状态。对于分布式系统,您将需要一个缓存存储系统来保持所有节点同步。在本文中,我们将回顾DevExpress Web Document Viewer的缓存管理功能,并演示如何使用它们来优化应用程序性能。
DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。
DevExpress Reporting v23.1正式版下载(Q技术交流:523159565)
DevExpress Web Document Viewer使用两种级别的缓存:短期(内存缓存)和长期(存储)。
短期缓存驻留在内存中并存储对象模型,以便更快地执行频繁使用的操作。它将报表布局和文档缓存为对象,这些对象稍后被序列化并移动到长期存储(在需要时)。
长期缓存存储序列化的数据,以便按需检索对象。DevExpress Reporting为长期缓存提供了各种存储选项,包括文件存储、数据库存储(基于XPO)、ASP. NET Core分布式缓存(SQL Server, Redis)和Azure云存储。
简要介绍了缓存级别之后,让我们来看看实现细节。DevExpress Reporting允许您根据所选择的存储类型(例如数据库缓存的UseDbStorage方法或分布式缓存的UseDistributedCache方法)配置其缓存,选择存储类型允许DevExpress Web Document Viewer利用指定的缓存来高效地缓存和检索报告布局、生成的文档和导出的文件。
UseDistributedCache方法支持在ASP. NET Core应用程序中使用分布式缓存,不同的分布式缓存实现是可用的,包括SQL Server, Redis和NCache。
要实现ASP. NET Core应用程序(用于DevExpress Web Document Viewer)中的分布式缓存,您必须:
Step 1:安装所需的软件包
确保您在ASP. NET Core项目中安装了必要的包,将需要以下软件包:
Step 2:配置分布式缓存
在您的ASP. NET Core应用程序中,按照以下指南配置和启用分布式缓存:
Step 3:在DevExpress Web Document Viewer中启用分布式缓存
在同一个Startup.cs文件中,找到ConfigureServices方法并找到services.ConfigureReportingServices块。在该块中,添加以下代码以启用分布式缓存:
services.ConfigureReportingServices(builder =>
{
builder.ConfigureWebDocumentViewer(viewerBuilder =>
{
viewerBuilder.UseDistributedCache();
});
});
分布式缓存只适用于ASP.NET Core,与之不同的是,这种类型的缓存适用于所有支持的Web平台。
UseDbStorage方法允许使用数据库缓存存储,它需要一个到现有数据库的连接字符串。该缓存基于XPO Data Providers,支持多个关系数据库管理系统。要实现数据库缓存,您必须:
Step 1:在Web Document Viewer中使用数据库缓存
在Startup.cs文件中,找到ConfigureServices方法并找到services.ConfigureReportingServices块。在该块中,添加以下代码来启用数据库缓存
public void ConfigureServices(IServiceCollection services) {
//…
services.ConfigureReportingServices(configurator => {
configurator.ConfigureWebDocumentViewer(viewerConfigurator => {
viewerConfigurator.UseCachedReportSourceBuilder();
viewerConfigurator.UseDbStorage("XpoStorageConnection");
//…
});
//…
}
用所选数据库的连接字符串替换XpoStorageConnection,确保设置了数据库并安装了适当的XPO数据库提供程序。
Step 2:初始化数据库
使用IStorageDbInitializer接口初始化数据库表和模式:
public class Program {
public static void Main(string[] args) {
IWebHost host = CreateWebHostBuilder(args).Build();
if (args.Any(s => s.ToLower() == "--initDatabase")) {
using (var scope = host.Services.CreateScope()) {
var services = scope.ServiceProvider;
services.GetRequiredService().InitDbSchema();
}
}
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
return WebHost.CreateDefaultBuilder(args)
.UseStartup();
}
}
从缓存的报表源生成文档所需的时间将根据文件存储系统的性能而有所不同。
要将报告文档缓存为文件,请根据需要使用UseFileDocumentStorage, UseFileExportedDocumentStorage, UseFileReportStorage, 和 UseCachedReportSourceBuilder方法。
如果您希望使用Azure提供的选项缓存报表文档,请参考以下帮助主题:Web Farms and Web Garden Support。
如果管理得当,缓存是有效的——包括缓存的报表布局和文档保留的时间长度。DevExpress Reporting提供缓存过期选项,使用 CacheCleanerSettings 和StorageCleanerSettings,在您的应用程序中实现性能和内存消耗之间的平衡。