I have a colleague that has an EasyMorph project with more then 400 tables and more than 2000 actions.
The projects runs slow. Would it run faster when splitting this over several modules in a single project or do we need to use multiple project files in that case?
Calling projects or calling modules has no difference in terms of performance.
If CPU utilization stays low (e.g. <30%) during project execution, try splitting the project into independent parts (modules) and running them in parallel from a master module.
If CPU utilization is high parallelization of workflow won’t help.
Thanks. We shall monitor CPU performance when refactoring the projects.
Does it help to move parts to a module in terms of RAM when executed on the server ?
In other words: does the server releases RAM when it has finished a module or does it keep the RAM occupied during the execution of the whole project?
I have a lot of (derived) tables in a project on large datasets. On the server I get an out of memory error. If I move some of the tables into separate modules inside the project, could this avoid the out of memory error ?
Yes, Server releases memory entirely once a module or project has finished execution. Moving memory-intense parts of a workflow into modules might help.
Keep also in mind that derived tables are executed in parallel which means that they will consume RAM simultaneously and their memory consumption will add up.
If you want to separate in time memory-intense calculations you can use the “Synchronize” action to ensure that modules in derived tables are not called simultaneously, but one after another. In this case memory used by the 1st module will be released before 2nd module starts execution.
Thanks for the explanation !
Does the EM-desktop also releases memory when we schedule derived tables one after the other using the synchronize action ?
Memory is released when a called module or project finished running. This mechanism works the same way in both Desktop and Server. EasyMorph Server and Launcher (but not Desktop) have additional optimizations to reduce memory consumption which may save another 10-20% of memory.
Does EM-server also releases RAM within a module when we chain tables with the synchronize action?
No, it does not. RAM released only after a module is finished execution. There is additional memory optimization in Server/Launcher that releases some intermediate results before finishing module execution, but their effect isn’t major.