IRONSOFTWAREHOME

Hohe Spitzenarbeitsspeicher während ReadPdf auf großen PDFs

Curtis Chau
Curtis Chau
Updated: 29. Juni 2026

Ein Aufruf von BarcodeReader.ReadPdf() für ein ganzes großes PDF rendert jede angeforderte Seite für das Scannen bei der konfigurierten DPI, sodass der maximale Speicherverbrauch mit der Seitenanzahl und der Auflösung skaliert, anstatt konstant zu bleiben. Bei einer 248-seitigen, 80 MB großen Datei bei 300 DPI lag der Arbeitsspeicher zwischen 3 GB und 8 GB mit Spitzen von bis zu 12 GB, was in speicherbegrenzten Umgebungen zum Scheitern führen kann.

BarcodeReader.ReadPdf() verarbeitet jede ihm übergebene Seite in einem einzigen Vorgang. Wenn die gesamte Seitenreihe eines großen, hochauflösenden Dokuments auf einmal gelesen wird, werden alle diese Seiten zusammen im Arbeitsspeicher gehalten, sodass die Spitzenverwendung mit der Größe des Seitensatzes wächst. Dies spiegelt wider, wie die Lektüre in Stapeln erfolgt, nicht jedoch ein bestätigter Defekt in IronBarcode.

Lösung

1. Lesen in festen Seitenblöcken

Teilen Sie das Dokument mit PdfBarcodeReaderOptions.PageNumbers in feste Seitenabschnitte, sodass jeweils nur ein Abschnitt im Speicher ist. Ein kleinerer chunkSize senkt den maximalen Speicherbedarf, fügt jedoch mehr Durchläufe hinzu. Stimmen Sie es also auf das Speicherlimit der Umgebung ab.

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#

Jede Iteration liest nur die in PageNumbers genannten Seiten, sodass der Speicher zwischen den Abschnitten herunterfährt, anstatt im gesamten Dokument zuzunehmen.

2. Cache der PDF-Stream und Rücksetzen der Position

Lesen Sie den Stream einmal vor der Schleife in eine lokale Variable und spulen Sie ihn dann für jeden Abschnitt zurück. Die Stream-Eigenschaft kann bei jedem Zugriff eine Zuordnung vornehmen, speichern Sie sie daher in var pdfStream = pdf.Stream; und rufen Sie pdfStream.Seek(0, SeekOrigin.Begin) vor jedem Abschnitts-Read auf.

3. Erstellen Sie die Leseroptionen einmal

Erstellen Sie PdfBarcodeReaderOptions außerhalb der Schleife und ändern Sie pro Abschnitt nur PageNumbers, anstatt bei jeder Iteration ein neues Optionsobjekt zuzuweisen.

4. Vorerstellen der Ergebnisliste

Initialisieren Sie die Ergebnisliste mit einer geschätzten Kapazität, um wiederholtes internes Verdoppeln des Arrays zu vermeiden, wenn Ergebnisse hinzugefügt werden. Die Wiederholung schätzt ungefähr einen Barcode pro zehn Seiten als Ausgangszahl.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

...
Weiterlesen

Bereit anzufangen?

Nuget Downloads 2,422,100Version:2026.9gerade veröffentlicht

Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.
C# NuGet-Bibliothek für PDF
Installation mit NuGet

Version: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. Rechtsklick auf Referenzen, NuGet-Pakete verwalten
  2. Wählen Sie Durchsuchen und suchen Sie "IronBarcode"
  3. Paket auswählen und installieren
C# PDF DLL
Download DLL

Version: 2026.9

  1. Laden Sie IronBarCode herunter und entpacken Sie es an einem Ort wie ~/Libs in Ihrem Lösungsverzeichnis
  2. Klicken Sie im Visual Studio Solution Explorer mit der rechten Maustaste auf Verweise. Wählen Sie Durchsuchen und dann "IronBarcode.dll"

Lizenzen ab $999

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
AWS-Logo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Azure (WebApps, Funktionen v3)
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Azure (WebApps, Funktionen v3)
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.