# CollectIncremental(ulong)

> Perform an on-demand incremental garbage collection for a maximum duration specified by the nanoseconds parameter.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Scripting](/engine/6000.6/script-reference/unityengine/scripting.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public static bool CollectIncremental(ulong nanoseconds = 0)
```

### Parameters

**** (\[ulong]\(https\://learn.microsoft.com/dotnet/api/system.uint64)): The maximum duration in nanoseconds for the garbage collection operation. When set to 0 (the default), no garbage collection is performed.

### Returns

| Type                                                          | Description                                                                                                                                                                                                                                      |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | Returns true if additional garbage collection work remains when the method returns and false if garbage collection is complete. Also returns false if incremental garbage collection is not enabled or is not supported on the current platform. |

### Remarks

If incremental garbage collection is enabled, then `CollectIncremental` runs the incremental garbage collector for up to the specified number of nanoseconds. The method returns when either the specified amount of time has elapsed, or there is no more garbage collection work to be done. Note that the garbage collector uses the underlying platform timer, which can have a resolution as low as a few microseconds. In other words, changing the value by a few nanoseconds might have no effect.

Use this method when you know you have a certain amount of time to wait for something to happen, and want to use this time to let the garbage collector run.

If incremental garbage collection is not enabled, this method does nothing and returns `false`. Enable incremental garbage collection in the [PlayerSettings](/engine/6000.6/script-reference/unityeditor/playersettings.md) for a project. You can check whether incremental garbage collection is enabled with [GarbageCollector.isIncremental](/engine/6000.6/script-reference/unityengine/scripting/garbagecollector/isincremental.md).

If no value is specified for the `nanoseconds` parameter, the value defaults to `0` and no incremental garbage collection is performed.

**Note**:  The `nanoseconds` parameter specifies the maximum total time for which to perform an on-demand incremental garbage collection and should not be confused with [GarbageCollector.incrementalTimeSliceNanoseconds](/engine/6000.6/script-reference/unityengine/scripting/garbagecollector/incrementaltimeslicenanoseconds.md) which specifies the target duration of the individual collection steps that incremental garbage collection is split across. For example, if [GarbageCollector.incrementalTimeSliceNanoseconds](/engine/6000.6/script-reference/unityengine/scripting/garbagecollector/incrementaltimeslicenanoseconds.md) has its default value of 3000000 nanoseconds (3 ms) and you call `GarbageCollector.CollectIncremental(10000000)`, the garbage collector can run for a maximum of 10 ms and therefore can perform a maximum of three (but likely no more than two) 3 ms long incremental collection steps in the time available.

Additional Resources: [GarbageCollector.incrementalTimeSliceNanoseconds](/engine/6000.6/script-reference/unityengine/scripting/garbagecollector/incrementaltimeslicenanoseconds.md).
