V3 Documentation
Search

Build Process Memory Limit

Global-level NCrunch configuration setting Default Value: 125000000

Purpose

This configuration setting defines a memory utilisation limit for all build processes executed by NCrunch. The limit is specified as the maximum number of bytes allowed to be allocated by a build process before the process is marked for automatic recycling by NCrunch.

This setting exists to prevent memory leaks within build steps from accumulating memory utilisation over time. Because NCrunch re-uses build processes for the life of its engine activation, memory leaks are a much bigger problem when compared with the transient build actions triggered from Visual Studio or the command-line (where the MSBuild process automatically terminates on build completion).

Implementation

Memory limits are only enforced passively and will not result in any build process being interrupted. When a build completes, NCrunch will inspect the amount of memory still allocated by the process. If the memory utilisation exceeds the limit, the build process will be terminated to prevent it from being later re-used by the engine. This means it is still possible for build processes to temporarily exceed the memory limit without being marked for recycling, provided their memory utilisation is below the limit when the build has been completed.

Setting the value for this configuration setting to 0 will disable the memory limit.

Recommendations

In most cases, the default value for this configuration setting should not be changed. It is abnormal for a build process to consume more than 100M. When this does happen, it is usually the result of an accumulation of leaked memory.

Where NCrunch is being used with heavy parallelisation in memory constrained environments, it may be an advantage to reduce this setting to something much lower than its default. Note that setting the memory limit too low will reduce the performance of the engine, as a new build process must be spawned for every project being built.