IRONSOFTWAREHOME

Pico Alto de Memoria al Leer PDF en Archivos PDF Grandes

Curtis Chau
Curtis Chau
Updated: 29 de junio de 2026

Llamar a BarcodeReader.ReadPdf() una vez para todo un PDF grande renderiza cada página solicitada para escanear a la DPI configurada, por lo que la memoria máxima escala con el conteo de páginas y la resolución en lugar de mantenerse constante. En un archivo de 248 páginas y 80 MB a 300 DPI, la memoria osciló entre 3GB y 8GB con picos de hasta 12GB, suficiente para fallar en entornos con limitaciones de memoria.

BarcodeReader.ReadPdf() procesa cada página entregada en una sola operación. Cuando se lee al completo el rango de páginas de un documento grande, alta DPI, todas esas páginas se mantienen juntas en memoria, de modo que el uso máximo crece con el tamaño del conjunto de páginas. Esto refleja cómo se agrupan las lecturas, no un defecto confirmado en IronBarcode.

Solución

1. Leer en fragmentos de páginas fijos

Divide el documento en fragmentos de páginas fijas con PdfBarcodeReaderOptions.PageNumbers para que solo un fragmento esté en memoria a la vez. Un chunkSize más pequeño reduce la memoria máxima pero agrega más pasadas, así que ajústalo al límite de memoria del entorno.

var barcodeMetadata = new List<BarcodeResult>();
var pageChunks = Enumerable.Range(1, pdf.PageCount)
    .GroupBy(i => i / 50)
    .Select(g => g.ToArray())
    .ToList();
foreach (var chunk in pageChunks)
{
    var readerOptions = new PdfBarcodeReaderOptions
    {
        ExpectMultipleBarcodes = true,
        ExpectBarcodeTypes = IronBarCode.BarcodeEncoding.AllOneDimensional,
        Speed = ReadingSpeed.Detailed,
        ScanMode = BarcodeScanMode.OnlyDetectionModel,
        DPI = 300,
        PageNumbers = chunk
    };
    Console.WriteLine($"Processing pages: Pages {chunk.First()}-{chunk.Last()}");
    var chunkResult = BarcodeReader.ReadPdf(pdf.Stream, readerOptions);
    if (chunkResult != null && chunkResult.Count > 0)
    {
        barcodeMetadata.AddRange(chunkResult);
    }
    // Optional memory pressure relief
    GC.Collect();
    GC.WaitForPendingFinalizers();
}
Console.WriteLine($"Total barcodes found: {barcodeMetadata.Count}");
C#

Cada iteración solo lee las páginas nombradas en PageNumbers, por lo que la memoria disminuye entre fragmentos en lugar de acumularse en todo el archivo.

2. Caché del flujo PDF y restablece su posición

Lee el flujo en una variable local antes del bucle, luego rebobínalo por fragmento. La propiedad Stream puede asignar memoria en cada acceso, así que almacénala en var pdfStream = pdf.Stream; y llama a pdfStream.Seek(0, SeekOrigin.Begin) antes de cada lectura de fragmento.

3. Construir las opciones del lector una vez

Construye PdfBarcodeReaderOptions fuera del bucle y cambia solo PageNumbers por fragmento, en lugar de asignar un nuevo objeto de opciones en cada iteración.

4. Pre-tamaño de la lista de resultados

Inicializa la lista de resultados con una capacidad estimada para evitar duplicar internamente una matriz repetidamente a medida que se añaden resultados. La repro estima aproximadamente un código de barras por cada diez páginas como cifra inicial.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

¿Listo para empezar?

Nuget Downloads 2,422,100Versión:2026.9recién lanzado

Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Biblioteca C# NuGet para PDF
Instalar con NuGet

Versión: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. En el Explorador de Soluciones, haga clic derecho en Referencias, Administrar Paquetes NuGet
  2. Seleccione Examinar y busque "IronBarcode"
  3. Seleccione el paquete e instale
C# PDF DLL
Descargar DLL

Versión: 2026.9

  1. Descargue y descomprima IronBarCode en una ubicación como ~/Libs dentro de su directorio de Solución
  2. En el Explorador de Soluciones de Visual Studio, haga clic derecho en Referencias. Seleccione Examinar, "IronBarcode.dll"

Licencias desde $999

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta