Quantcast
Channel: Recent Threads — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 204402

Memory issues with PDFDocument

$
0
0

Hey guys,

I'm having memory issues using PDFKit.PDFDocument. I tried a lot, but the GC is too slow collecting
This function is being called repeatedly for lots of files. Only after all files are processed memory is released, so on devices with lower memory limit, my app crashes..
But I need it to release memory after each file.

public string ExtractTextFromPdfAtPath(string path)
        {
            Mvx.Trace("+ ExtractTextFromPdfAtPath for content " + path + " started.");

            var stringBuilder = new StringBuilder();
            var url = new NSUrl(_fms.GetFullPath(path), false);
            if (_fms.FileExists(url.Path))
            {
                var bytes = _fms.ReadFileSync(url.Path);

                //var tmpFileUrl = new NSUrl(url.AbsoluteString + "decrypted.pdf");

                //using (var readStream = AsyncHelper.RunSync<Stream>(async () => await _fms.OpenFileAsync(url.Path)))
                //using (var decrypted = AsyncHelper.RunSync<Stream>(async () => await _es.DecryptStreamAsync(readStream)))
                //{
                //_fms.WriteFileSync(tmpFileUrl.Path, (stream) => decrypted.CopyTo(stream));



                using (var memoryStream = new MemoryStream(bytes))
                using (var decryptedStream = AsyncHelper.RunSync<Stream>(async () => await _es.DecryptStreamAsync(memoryStream)))
                {
                    using (var ns = new NSAutoreleasePool())
                    {


                        var data = NSData.FromStream(decryptedStream);
                        var doc = new PdfDocument(data);

                        if (doc != null)
                        {
                            var pageCount = doc.PageCount;
                            for (int i = 0; i < pageCount; i++)
                            {
                                stringBuilder.Append(doc.GetPage(i).Text);
                            }
                        }

                        //doc.DangerousRelease();
                        doc.Dispose();
                        doc = null;

                        //data.DangerousRelease();
                        data.Dispose();
                        data = null;                        
                    }
                }
                //}

                //bytes
            }

            var extractedText = stringBuilder.ToString();
            if (string.IsNullOrWhiteSpace(extractedText))
            {
                extractedText = "-";
            }

            stringBuilder.Clear();
            stringBuilder = null;

            Mvx.Trace("+ ExtractTextFromPdfAtPath for content " + path + " finished.");

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            return extractedText;
        }

Viewing all articles
Browse latest Browse all 204402

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>