### Problem

I'm using the superb [nimPDF](https://github.com/jangko/nimpdf) library for 
generating PDF-files in various shapes and forms, but for some of my very large 
files the memory usage is becoming a problem. I generate the PDF-files within a 
loop, so I can keep headings, preloaded images and so on ready - but after each 
loop, the previous used memory is not freed.

### Question

My main goal is to have way to free or clear the memory between the loops. Can 
I manually free the `var doc` in a safe way?

### Example pseudo code
    
    
    import nimPDF/nimPDF
    
    var opts = newPDFOptions()
    opts.addImagesPath("pic")
    var doc = newPDF(opts)
    
    for i in 0..10:
      doc.addPage(getSizeFromName("A4"), PGO_PORTRAIT)
      doc.drawText(15, 15, "Hello World!")
      
      var image = doc.loadImage("large-pic.jpg")
      var x = 40.0
      var y = 40.0
      doc.drawImage(x, y, image)
      
      if not doc.writePDF("hello.pdf"):
        echo "cannot open: hello.pdf"
      
      echo "------------------"
      GC_fullCollect()
      echo GC_getStatistics()
      
      # Can I free the memory here? In the next line I reassign the doc, but 
the memory used above is still present.
      doc = newPDF(opts)
    
    
    Run

### Stats

When running in 4 loops with some pretty heavy PDF files these are the stats. I 
can just continue to run these loops, and the memory usage increases steadily.
    
    
    # Compile options
    nim version == 1.6.0
    nimPDF version == 0.4.3
    switch("gc", "orc")
    
    ------
    
    # Loop1 - 425mb filesize
    [GC] occupied memory: 648737024
    [GC] total memory: 810221568
    
    # Loop2 - 423mb filesize
    [GC] occupied memory: 1941934384
    [GC] total memory: 2394058752
    
    # Loop3 - 435mb filesize
    [GC] occupied memory: 2865117408
    [GC] total memory: 3682131968
    
    # Loop4 - 1.2gb filesize
    [GC] occupied memory: 2506910752
    [GC] total memory: 5641519104
    
    ------
    
    
    
+------+--+---------------+----------------+--+-------------------+----------------+--+-------------+
    | Loop |  | Occupied (mb) | Diff from prev |  | Total memory (mb) | Diff 
from prev |  | Filesize MB |
    
+------+--+---------------+----------------+--+-------------------+----------------+--+-------------+
    |    1 |  |           649 |              0 |  |               810 |         
     0 |  |         425 |
    |    2 |  |          1942 |           1293 |  |              2394 |         
  1584 |  |         423 |
    |    3 |  |          2865 |            923 |  |              3682 |         
  1288 |  |         435 |
    |    4 |  |          2507 |           -358 |  |              5642 |         
  1959 |  |        1200 |
    
+------+--+---------------+----------------+--+-------------------+----------------+--+-------------+
    
    
    
    
    Run

Reply via email to