IRONSOFTWAREHOME

Büyük PDF'lerde ReadPdf Sırasında Yüksek Zirve Belleği

Curtis Chau
Curtis Chau
Updated: 29 Haziran 2026

Büyük bir PDF için yalnızca bir kez BarcodeReader.ReadPdf() çağrıldığında, talep edilen her sayfa ayarlanan DPI'de tarama için işlenir, böylece tepe bellek sayfa sayısı ve çözünürlük ile birlikte ölçeklenir, düz bir seviyede kalmaz. 248 sayfalık, 80MB dosyada 300 DPI'da bellek 3GB ile 8GB arasında çalıştı, 12GB'a kadar sıçradı, hafıza sınırlı ortamlarda başarısız olmaya yetecek kadar.

BarcodeReader.ReadPdf() kendisine verilen her sayfayı tek bir işlemde işler. Tam sayfa aralığı büyük, yüksek-DPI belgede bir defada okunduğunda, tüm bu sayfalar bellekle birlikte tutulur, bu nedenle zirve kullanımı sayfa setinin boyutuyla büyür. Bu, okuma toplu işlenmesinin nasıl yapıldığını yansıtır, IronBarcode'un teyit edilmiş bir hatası değildir.

Çözüm

1. Sabit sayfa parçaları halinde okuyun

Belgeleri sabit sayfa parçalarına bölmek için PdfBarcodeReaderOptions.PageNumbers kullanın, böylece her seferinde yalnızca bir parça bellekte kalır. Daha küçük bir chunkSize tepe belleği düşürür ancak daha fazla geçiş ekler, bu yüzden bunu ortamın bellek sınırına göre ayarlayın.

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#

Her yineleme, sadece PageNumbers içinde adlandırılan sayfaları okur, bu nedenle bellek tüm dosya boyunca birikmek yerine parçalar arasında düşer.

2. PDF akışını önbelleğe alın ve konumunu sıfırlayın

Akışı döngüden önce bir kez yerel bir değişkene okuyun ve sonra her parça için geri sarın. Stream özelliği her erişimde tahsis edebilir, bu yüzden bunu var pdfStream = pdf.Stream; içinde depolayın ve her parça okumadan önce pdfStream.Seek(0, SeekOrigin.Begin) çağırın.

3. Okuyucu seçeneklerini bir kez oluşturun

PdfBarcodeReaderOptions döngü dışında kurun ve her döngüde taze bir seçenekler nesnesi tahsis etmek yerine yalnızca PageNumbers parça başına değiştirin.

4. Sonuçlar listesini önceden boyutlandırın

Sonuçlar eklenirken iç dizi boyutlandırmasının tekrarını önlemek için tahmin edilen kapasitede sonuçlar listesini başlatın. Yineleme yaklaşık her on sayfa başına bir barkod başlangıç sayısı tahmin eder.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 2,422,100Sürüm:2026.9yeni yayınlandı

Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez
PDF için C# NuGet Kütüphanesi
NuGet ile yükleyin

Sürüm: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. Çözüm Gezgini'nde Referanslar'a sağ tıklayın, NuGet Paketlerini Yönet
  2. Gözat'ı seçin ve "IronBarCode" arayın
  3. Paketi seçin ve yükleyin
C# PDF DLL
DLL İndir

Sürüm: 2026.9

  1. ~/Libs gibi bir yere, Çözüm dizininizde IronBarCode'u indirip çıkarın
  2. Visual Studio Çözüm Gezgini'nde, Başvurulara sağ tıklayın. Gözat'ı seçin, "IronBarCode.dll"

$999 adresinden lisanslar

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez