Overview
XAF applications use the Application Model a lot. When the quantity of modules in the app grows, the Application Model becomes more complicated (because of the increasing number of layers in the Application Model). It slows the Application Model performance down and leads to notable time lags in the application itself. The growing amount of time needed for the app to start is the most obvious sign of such changes.To solve the issue mentioned above, use the Xafari.Accelerator module designed precisely to fix the problems with the Application Model performance.
Effects of Usage
Being used in demo applications, Xafari.Accelerator showed twice as less starting time compared to the same apps without this module. The actual result for a particular project depends on the complexity of the application and the quantity of business objects in use.The results of demo application profiling proved that the usage of Xafari.Accelerator allows excluding all operations with the Application Model from the profiling reports. When Xafari.Accelerator is not used, the operations with the Application Model are critical according to the application profiling reports.
Profiling EAM application
I profile application Galaktika.EAM and colect results of usage Xafari.Accelerator. I marked the time that has passed since the beginning of the start of the application:Stages | Standard start, с | Accelerator using, с | Acceleration, times |
---|---|---|---|
Splash screen | 4 | 5 | 0.8 |
Logon | 40 | 14 | 2.85 |
Startup View | 63 | 33 | 1.9 |
How to Start
Module Xafari.Accelerator is included to Xafari x08 and above.
Module Adding
To start using the module, add the overloaded methods to the descendant class as shown in two code samples below.For WinApplication:
using System.Collections.Generic;
using Xafari;
using Xafari.Win;
public class NorthwindWindowsFormsApplication : WinApplication
{
protected override ApplicationModelManager CreateModelManager(IEnumerable<Type> boModelTypes)
{
return this.Xafari().Win().CreateModelManager(boModelTypes, base.CreateModelManager);
}
protected override void OnSetupStarted()
{
this.Xafari().OnSetupStarted(base.OnSetupStarted);
}
}
For WebApplication:
using System.Collections.Generic;
using Xafari;
using Xafari.Web;
public class NorthwindAspNetApplication : WebApplication
{
protected override ApplicationModelManager CreateModelManager(IEnumerable<Type> boModelTypes)
{
return this.Xafari().Web().CreateModelManager(boModelTypes, base.CreateModelManager);
}
protected override void OnSetupStarted()
{
this.Xafari().OnSetupStarted(base.OnSetupStarted);
}
}
NoteNow the Xafari.Accelerator module can be added to the application in VS through the Application Model designer. It is also possible to add it other ways, e.g. via the .config file of the application.
These methods add the necessary extension points that are further used by the accelerator. If Xafari.Accelerator is disabled or not used, the behavior of such methods remains the same. Such approach protects the application from any negative effects that newly implemented methods can cause.
Important
Xafari.Application requires the application to run in .NET 4.5.1+ mode.
Module Usage
Accelerator Start
By default, Xafari.Accelerator is available but not used. To start it, the administrator of the application should use the Start Accelerator option in the Tools tab.If the operation was successful, the following popup window is shown:
Xafari.Accelerator will be in use as soon as the application is launched the next time.
Accelerator Stoppage
The administrator of the application can use the Stop Accelerator option in the Tools tab to disable Xafari.Accelerator.If the operation was successful, the following popup window is shown:
The Accelerator will be disabled during the next launch of the application.
Note
The alternative way to disable the accelerator is to remove its files ApplicationName.Accelerator.xafml (ApplicationName.Accelerator_locale.xafml) from the same folder that stores the ModelAssembly.dll file (by default, it should be the application folder).
Temporary Accelerator Stoppage
When it is needed to turn the accelerator off for a particular period only, use the following key in the configuration file:
<configuration>
<appSettings>
<add key="Xafari.Accelerator" value="False" />
</appSettings>
<configuration>
Alternatively, the accelerator can be temporarily disabled in the code as shown below:
XafariAcceleratorModule.Enabled = false
How It Works
Xafari.Accelerator core principle is the usage of a separate XML file to store the whole Application Model unchangeable part for the current combination of modules and their versions. The same idea works for localization files if there are any.Note.The Accelerator then modifies the Application Model so that its unchangeable part builds upon this only file.
The accelerator files ApplicationName.Accelerator.xafml (ApplicationName.Accelerator_locale.xafml) are stored in the same folder that has the ModelAssembly.dll file. By default, it is the application folder.
As a result, there are only two layers left in the Application Model: the accelerator and the user.
The Xafari.Accelerator module also extends the Application Model with extra interfaces to avoid performance issues that may happen when adding CustomMembers.
Required assemblies
- Xafari.Utils.dll
- Xafari.dll
- Xafari.Win.dll (Xafari.Web.dll)
- Xafari.Web.dll
- Xafari.Web.Utils.dll)