Skip to main content

Hello,

I'm looking for some assistance/advice. I'm fairly new to Acumatica development but I've been doing development work against the Sage accounting system for a number of years. I've followed the Acumatica development training courses and have delivered a few development solutions to our customers so far. Though they were fairly simple solutions they are seen as a big step forward for our company and we want to build on the experience and work on larger projects. 

However, I'm finding that development with Acumatica is proving to be very, very time consuming because when I recompile a dll in visual studio there is a long delay before the pages in Acumatica refresh. The compiling action is visual studio is very fast but the Acumatica refresh is extremely slow. I'm often waiting over 3 minutes for the pages to refresh. If I need to update an aspx page then the solution becomes worse, by the time I've applied the changes via the customization page and waited for the Acumatica pages to refresh I can be waiting around 6 minutes. 

These delays are killing my productivity and making Acumatica development a bit of a misery. At my current skill level I'm making changes very often to try different ideas out, if I can only test my changes after a 5-6 minute wait before making further changes then I'm only testing between 6-12 changes per hour, with figures like this you can understand why I'm finding development work with Acumatica so time consuming and frustrating. I've searched the web many times and found articles about making changes to the web.config file, I've tried these tips but the improvements were marginal. I've searched for articles about the speed of development but not found any articles discussing the topic, I've also watched the 'Coffee and Code' videos on Youtube - I cannot find any discussion about these slow refreshing issues which makes me think that perhaps others are not experiencing the issues I am. 

Do anyone have any advice on how to speed up development in Acumatica? Is there any way to speed up the refreshing of the Acumatica system after a custom dll is compiled? Can anyone say what sort of delay I should be expecting after compiling a custom dll? I'm hopeful that others are getting much faster response times and I can make changes to my system to speed things up. 

Thanks
Steve

Hi Steve, 

Unfortunately, that’s a common thing. 

Hopefully, with the migration to .Net core that may be improved, but as of now changing the web.config parameters is pretty much all that you can do. 


In practice the best you can do is use a runtime code customization instead of recompiling a library project in visual studio. Runtime code is recompiled by IIS each time a web page is accessed after the source code has been modified.

 

The performance characteristic you mention are related to ASP platform which is the web server technology Acumatica uses. In my experience, modifications to web.config doesn’t bring noticeable performance improvement and can lead to cache issues (stuck on old DLL, runtime_code not being recompiled).

 

You can try to search for any solution that improves ASP/IIS performance but there’s no magic solution unfortunately. There are faster web servers around. However Acumatica wouldn’t be quite the same with a Java/JavaScript/PHP/CGI backend. 

I was in the same boat a few years ago. Working on desktop applications has always been my preference. It does feel like a big step backwards to develop for mobile/embedded devices/web servers. As an end user, I would avoid anything that has to do with AJAX (web page not loading properly and/or in a timely manner). It’s come to a point where desktop applications are just not an option anymore.

 

In the end I just had to move along and accept the wait time along with the innefiencies of non desktop applications. Other programmers have to wait a lot on these platforms so overall it’s the entire industry that is less productive, not just you. That’s why there are big companies with thousands of employees working on a seemingly trivial website or phone app.


3+ minutes seems like a lot but it will largely depend on the development machine you are working on. I am typically looking at 20-30 seconds(15-20 at my home desktop) to refresh the application after making changes(my Web.Config is modified to speed it up).

For ASPX pages if you are doing a custom page you can modify the page file directly(via Visual Studio and not the customization editor) I find it is a lot quicker and you can just refresh the page to load the changes.

 

I would say the comment about desktop applications vs web applications is a little dated or at least not applicable outside of the .NET ecosystem. If you look at a framework like Next.Js the iteration speed is top notch. Same thing with a mobile framework like Flutter.

I think a huge part of a lot of other web frameworks is that they have a development mode that is specifically optimized for development instead of production and supports features like hot reload to speed up development iteration. 


Thank you for your responses. They seem to range from saying that my experience of a 3+ minute time is normal to saying that a refresh time of as little as 15 seconds could be achieved.

I’d be very interested to know the refresh times from dnaumov and Hughes Beausejour. 

If I could reduce my refresh times to anything under 1 minute it would make a huge difference. Really, really massive.

On the comment about the speed of the development machine. When I first started with Acumatica development and saw how slow the refreshing was we decided to invest in new computers. We now have very fast i9 processes with SSD and lots of memory. They perform all others tasks extremely fast so I don’t think we are lacking in computing power.

On the comment about big companies, with thousands of employees working on web sites and apps. Are you suggesting that this is the sort of requirement needed for Acumatica development too? I don’t think you are but your response sort of reads this way.  

The tip on editing aspx pages directly is a good one and I will try this today. This will make testing layouts much faster. 

Thanks again
Steve


About 3 to 5 minutes is the time it takes on my computer. Having a faster computer doesn’t scale very well but I’ve seen about 1 minute on fast servers. Maybe IIS is shuffling a lot of files and security software (anti-virus) is in part responsible for the slow down.

The only trick I use is working in runtime code (App_RuntimeCode folder) instead of replacing files in the Bin folder. This takes more or less 1 minute.

>  with thousands of employees working on web sites and apps. Are you suggesting that this is the sort of requirement needed for Acumatica development too? 

No, it is more a personal pet peeve. I was thinking about GAFA, consider this:
Youtube has 2,800 employees and based on my experience the comments section does not load properly most of the time. They keep changing it but it still fails to load content regularly.

If Youtube was a desktop app I wouldn’t be staring indefinitely at a spinning icon waiting for a handful of comments to be displayed. Yet it seems I’m the only one it bothers.
If it was a desktop app they wouldn’t need nearly as much programmers to implement it.

As for Acumatica, the backend is ASP (DotNet) so I consider it’s mostly like a desktop app. It does compile very fast in Visual Studio. The problems begin with the ‘web’ part where the web server (IIS) has to load the assembly, this is the slow part.

As markusray17 and I mentionned, there are other faster web server. NodeJS has a very low recycle time but Acumatica wouldn’t be quite the same if it’s backend was implemented in JavaScript instead of C#. And yes.. maybe we might need a thousand employee instead of ~500 if Acumatica was implementend in JavaScript. It is arguably harder to debug and maintain.


stephenward03, well, let me answer your question with another question.

What exactly is the operation that takes the most time for you?

I can decompose it in several parts:

  1. Compiling a project in VS (takes 1-2 seconds on my machine)
  2. refreshing a site after inserting new dll into the bin folder (just measured and it takes ~15-20 seconds on my machine) (actually measured it once again and get ~1 minute time. Not sure what it depends on)
  3. Publishing a customization package (depends on the complexity of customization package, may take ~20 seconds for a simple project with a single dll and grows pretty much linear when you add new things)
  4. Refreshing the site after publishing a customization project - takes <1 minute on my machine.

So  if I do perform all these actions it does take about 3 minutes. However, for development tasks like just changing a line of code you don’t need #3 and #4 most of the time. 

 

So, how much time each step takes for you?

 

P.S. Also restarting AppPool in ISS and refreshing the site after that takes ~4 minutes


Hi all,

I’m having the same problem.  Compiling the site after a code change in Visual Studio only takes a few seconds, but refreshing the site takes around 8 minutes.  The site and the database server are on the same laptop.  There is 32G of RAM on a Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz.

I’ve made the changes to Web.config in this article: Developer Tips & Tricks (Part I): Configuring Your Acumatica Instance - Acumatica Cloud ERP and the changes here for IIS: Optimizing IIS Performance - BizTalk Server | Microsoft Docs.  Still long refresh times after a compile.

Any recommendations would be most appreciated… 15 second reload time would be awesome!

Thanks all!


@asommer  1.60GHz seems a bit low for a dev machine but I don’t think it may cause the difference (15 sec vs 8 min). Also, do you have SSD?

 

Could you describe your exact workflow?

E.g. do you have your code in AppRuntime folder as a part of Site project or in a separate VS project?

Do you recompile it in VS or just change the code, save and refresh the site?

Do you refresh the site in the browser after that?

Do you publish any customization packages?

Do you have a VS debugger attached to the process by any chance?

How many sites do you have in your Application Pool in IIS?

 


@Dmitrii Naumov thanks for your reply.

 

There are a bunch of .cs files in C:\Program Files\Acumatica ERP\PR00\App_RuntimeCode (PR00 being the app installation folder).

I have VS projects in the C:\Program Files\Acumatica ERP\PR00\App_Data\Projects\.  I edit the code compile in VS then refresh in the browser.  When compiling I don’t compile the whole site as described on this page: Make compilation of extension library faster - Acumatica Developers Blog.

I don’t normally publish the customization projects unless there is a change in a screen.  Or until my code is in a state to export the project.

No debugger is attached.  When using the debugger I do a refresh first to “get the site going” then start the debugger.

I have just the one site in my IIS Application Pool.

 

Thanks again!


@asommer 

So, if you just compile the dlls into the bin folder and refresh the site it should take several seconds for the compilation and 1-2 minutes for the site refresh. 

Do you have your CPU (at least one core) fully loaded during the load time?


No CPUs were fully loaded during refresh after a compile.  CPU usage was around 30% the whole time with a couple of jumps a little higher for a brief period.  The CPU frequency does max at 2.11Ghz, the 1.6 is the low “power save” frequency.

Thanks!


@asommer 

Well, it looks like it’s not CPU that is the bottleneck then. What about the disk? Is your hard drive SSD or HDD? Is it heavily loaded during the process?


It’s an SSD and the disk activity frequently spikes in I/O during the browser refresh.  I saw it go over 1.5M a couple of times.

I appreciate your help in troubleshooting this issue and it seems like I just need a more powerful laptop to do Acumatica development.

If there are no other config options I should try, I’ll pursue getting some new hardware.

Thanks again!


Reply