Search Results for

    Show / Hide Table of Contents

    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 instances. Changing these values affects all subsequent renders in the application.

    Inheritance
    System.Object
    BrowserPoolOptions
    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
    ☀
    ☾
    Downloads
    • Download with Nuget
    • Start for Free
    In This Article
    Back to top
    Install with Nuget
    Want to deploy IronPDF to a live project for FREE?
    What’s included?
    30 days of fully-functional product
    Test and share in a live environment
    No watermarks in production
    Get your free 30-day Trial Key instantly.
    No credit card or account creation required
    Your Trial License Key has been emailed to you.
    Download IronPDF free to apply
    your Trial Licenses Key
    Install with NuGet View Licenses
    Licenses from $499. Have a question? Get in touch.