Hi everyone !
We have some troubles with the loading time of ours forms.
It takes up to a few seconds to be totally painted, we ran a few tests on a data empty form which gave the same results.
Two points seems interesting :
- it happens only the first time the form is loaded
- it happens only with Infragistics components; with the Microsoft's controls the painting is really quick.
After some search on the net, and mostly on the Infragistics forum. I'm beginning to think about a .NET vm's JIT-compile issue / misconfiguration.
I've red some posts about running a tool named NGEN.exe on the assembly files (the infragistics dll) but to be honnest I'm confused and I didn't manage to do it...
Where are the assemblies we OE is using by the way ? We are using Rountable software, in a central repository, but I don't think it has any implications.
Thank you for your answers !
PS : I found some informations here, but I can't apply to OpenEdge : http://community.infragistics.com/forums/p/30286/165578.aspx#165578
froy wrote:
Hi everyone !
We have some troubles with the loading time of ours forms.
It takes up to a few seconds to be totally painted, we ran a few tests on a data empty form which gave the same results.
Two points seems interesting :
- it happens only the first time the form is loaded
- it happens only with Infragistics components; with the Microsoft's controls the painting is really quick.
After some search on the net, and mostly on the Infragistics forum. I'm beginning to think about a .NET vm's JIT-compile issue / misconfiguration.
I've red some posts about running a tool named NGEN.exe on the assembly files (the infragistics dll) but to be honnest I'm confused and I didn't manage to do it...
Where are the assemblies we OE is using by the way ? We are using Rountable software, in a central repository, but I don't think it has any implications.
Thank you for your answers !
PS : I found some informations here, but I can't apply to OpenEdge : http://community.infragistics.com/forums/p/30286/165578.aspx#165578
You should be able to run ngen on the Infragistics UltraControls that are installed as part of OpenEdge, I would think. OpenEdge does some magic under the covers since there really isn't the concept of an assembly in ABL, so there's nothing really to run it on from the application perspective.
-- peter
I believe there is a session startup parameter that will preload the assemblies. I forget what it is but I recall sitting in on a presentation by Shelley where she mentioned this.
Actually it is preloading the CLR. You may want to try this although I am not sure it will help.
Preload CLR (-preloadCLR) startup parameter
Use Preload CLR (
-preloadCLR) to load the .NET Common Language Runtime (CLR) and any
specified assemblies into the ABL session at startup. This provides for deterministic loading of
the CLR and assemblies when the application is started.
If you do not specify -
preloadCLR, the AVM loads the CLR the first time ABL refers to, or uses,
a .NET type or object either at compile time or runtime. The individual assemblies are loaded
as needed.
If you specify
-preloadCLR and the client machine does not have an appropriate version of the
.NET framework installed, OpenEdge raises an error and shuts down.
For more information on accessing .NET objects using the ABL, see
OpenEdge Development:
GUI for .NET Programming
. For information on the .NET CLR, refer to the Microsoft .NETFramework documentation.
Hi Peter,
Thx for your answer.
Do you mean that running the ngen won't help, as OE does not use the assemblies in the regular way ?
Thanks Roger, unfortunatly this hasn't changed anything. But maybe is there a step missing like declaring .net cache.
I'm going to search some documentation about this parameter.
What I usually do when this is an issue is to preload some of the Infragistics Assemblies by instantiating a dummy object:
DEFINE VARIABLE oObject AS System.Object NO-UNDO.
oObject = NEW Infragistics.Win.UltraWinToolbars.UltraToolbarsManager () .
oObject = NEW Infragistics.Win.UltraWinGrid.UltraGrid () .
...
DELETE OBJECT oObject .
and so on. I do so in a splash screen etc. I don't preload all Infagistics Libraries, just those very likely to start. Some users prefer to wait longer when the app starts, others don't.