We received a tip from a customer (Rob Seiwert at Video Corporation of America) last week that is worth passing along. This tip will improve the performance of your Infor CRM (Saleslogix) Web and reduce the initial load time after periods of inactivity, after a server reboot, or after a new deployment has been performed.
Pre-Compiling and IIS Application Pools
In the Application Architect there is an option to pre-compile when doing a deployment. While pre-compiling does help for worker processes, it doesn’t solve the startup issue. By default, an IIS application pool starts “on demand”. Meaning, that when the website is accessed it spins itself up, an IIS worker process is created and started, the appropriate assemblies are loaded into memory, threads are created a queued, and the code is executed. In short, the application pool isn’t started until it’s used, then the user waits for all of that initialization to happen.
I’ve seen many attempts at solving this over the years, such as applications that access each URL in a website each morning to cause things to load into memory, pre-initializing things before users start using things.
The IIS Application Initialization Module
To solve the issue stated earlier, the IIS team at Microsoft has created a module for IIS (supporting IIS 7 and higher) called the Application Initialization Module.
You can use the Web Platform Installer in IIS to install this module. Once installed, you can change the application pool’s start mode from “on demand” to “always running”. By setting the startMode to AlwaysRunning, when you recycle the process, perform a reboot, or redeploy CRM, the application pool’s IIS w3wp.exe process is started up automatically, rather than waiting for a user to come access CRM. In addition, you can enable “preload” for the website which causes a similar effect to a user accessing the website and causing pages to be background compiled by ASP.NET.
Read more about installing and configuring the IIS Application Initialization Module
One thing to keep in mind, that you’ll see the IIS processes in memory, basically all the time from that point on. Not a huge concern however, since this is what happens when a user hits CRM anyway. All in all, what you’re doing with this module, is simulating a user going to the website every so often to keep the worker processes running and loaded. This way, when real users access CRM, it’s ready to go and will perform better. Obviously, this isn’t the sort of thing you’d want to enable on a development deployment.
According to the customer we received this tip from, they are noticing a huge difference in the initial load time of their Infor CRM deployment. Our customers are completely great. It was great to be the receivers of such a helpful tip. Thanks Rob!