Class BrowserPoolOptions
Configuration options for the browser tab pool, which reuses browser tabs across renders to eliminate subprocess startup latency.
These settings are process-level — a single pool is shared across all
Inheritance
Namespace: IronPdf
Assembly: IronPdf.dll
Syntax
public class BrowserPoolOptions : Object
Remarks
Usage:
// Configure before any render calls
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.BrowserPool.Enabled = true;
renderer.RenderingOptions.BrowserPool.MaxIdleTabs = 2;
renderer.RenderingOptions.BrowserPool.IdleTimeoutSeconds = 30;
Constructors
BrowserPoolOptions()
Declaration
public BrowserPoolOptions()
Properties
Enabled
Enables or disables the browser tab pool.
When enabled, browser tabs are returned to a pool after rendering instead of being destroyed. The next render reuses a "warm" tab with its renderer subprocesses already running, avoiding the subprocess startup cost.
When set to false,
every render creates a new browser tab, spawns new subprocesses, and destroys everything
on completion. There is zero difference in behavior, memory usage, or output.
Default value is true.
Declaration
public bool Enabled { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
IdleTimeoutSeconds
Number of seconds an idle browser tab remains in the pool before being destroyed.
After a render completes and the tab is returned to the pool, a background thread periodically checks for tabs that have exceeded this timeout and destroys them to reclaim memory.
Default value is 30. Minimum value is 5.
Declaration
public int IdleTimeoutSeconds { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Remarks
Trade-off: Longer timeouts increase the chance of a warm tab being available for the next render, but hold memory longer during quiet periods.
Recommended values:
• 10 — Fast memory reclaim. Suitable for sporadic, bursty traffic.
• 30 (default) — Covers most typical web application request intervals.
• 60 — Suitable for batch processing pipelines or high-traffic APIs.
The actual destruction may occur up to 5 seconds after the timeout, depending on the internal cleanup interval.
Only relevant when Enabled is true and
MaxIdleTabs is greater than 0.
MaxIdleTabs
Maximum number of idle browser tabs kept alive in the pool.
Each idle tab retains its renderer subprocesses in memory, consuming approximately 50–100 MB of RAM. When a new render arrives, a warm tab is used instead of creating a new one, eliminating subprocess startup latency.
Default value scales with your hardware: Environment.ProcessorCount / 2,
clamped between 1 and 4. For example, a 4-core machine defaults to 2 idle tabs,
while an 8+ core machine defaults to 4.
Minimum value is 0.
Declaration
public int MaxIdleTabs { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Remarks
Recommended values:
• 0 — No tabs kept idle. Equivalent to disabling the pool.
• 1 — Minimal overhead (~50–100 MB). Suitable for sequential workloads,
single-core containers, or low-memory environments such as Azure Basic tier.
• 2 — Handles typical body + header/footer render patterns.
~100–200 MB overhead. Good default for 4-core machines and Azure Standard tier.
• 4 — Maximum default. Good for high-concurrency servers with 8+ cores.
~200–400 MB overhead.
Going beyond 4: You can set values higher than 4 if your workload involves many concurrent renders on a high-core-count server (e.g., 16+ vCPUs) with ample memory.
However, returns diminish beyond 4 because the CEF browser process
serializes events through a single thread, limiting how many renders truly run in
parallel. Most workloads see no benefit above CPU cores / 2.
Memory note: Idle tabs hold the previous document's DOM in renderer memory until the tab is reused or destroyed after IdleTimeoutSeconds. On memory-constrained environments, prefer a lower value paired with a shorter timeout.
Only relevant when Enabled is true.
Methods
ToString()
Returns a summary of the current pool configuration for diagnostic purposes.
Declaration
public override string ToString()
Returns
| Type | Description |
|---|---|
| System.String |