浏览代码

Fixed memory leaks

Marcin Ziąbek 1 年之前
父节点
当前提交
7b5177aa21
共有 2 个文件被更改,包括 11 次插入3 次删除
  1. 7 3
      Source/QuestPDF/Skia/SkData.cs
  2. 4 0
      Source/QuestPDF/Skia/Text/SkParagraph.cs

+ 7 - 3
Source/QuestPDF/Skia/SkData.cs

@@ -24,8 +24,8 @@ internal sealed class SkData : IDisposable
     {
     {
         using var memoryStream = new MemoryStream();
         using var memoryStream = new MemoryStream();
         stream.CopyTo(memoryStream);
         stream.CopyTo(memoryStream);
-        var binaryData = memoryStream.ToArray();
         
         
+        var binaryData = memoryStream.ToArray();
         return SkData.FromBinary(binaryData);
         return SkData.FromBinary(binaryData);
     }
     }
     
     
@@ -42,9 +42,13 @@ internal sealed class SkData : IDisposable
     public byte[] ToBytes()
     public byte[] ToBytes()
     {
     {
         var content = API.data_get_bytes(Instance);
         var content = API.data_get_bytes(Instance);
-        byte[] result = new byte[content.length];
+        
+        var result = new byte[content.length];
         Marshal.Copy(content.bytes, result, 0, content.length);
         Marshal.Copy(content.bytes, result, 0, content.length);
-
+        
+        // do not Marshal.FreeHGlobal(content.bytes)
+        // this array is managed by SkData
+        
         return result;
         return result;
     }
     }
     
     

+ 4 - 0
Source/QuestPDF/Skia/Text/SkParagraph.cs

@@ -32,6 +32,7 @@ internal sealed class SkParagraph : IDisposable
             managedArray[i] = Marshal.PtrToStructure<SkSize>(ptr);
             managedArray[i] = Marshal.PtrToStructure<SkSize>(ptr);
         }
         }
 
 
+        Marshal.FreeHGlobal(array);
         return managedArray;
         return managedArray;
     }
     }
     
     
@@ -41,6 +42,7 @@ internal sealed class SkParagraph : IDisposable
         
         
         var managedArray = new int[arrayLength];
         var managedArray = new int[arrayLength];
         Marshal.Copy(array, managedArray,  0, arrayLength);
         Marshal.Copy(array, managedArray,  0, arrayLength);
+        Marshal.FreeHGlobal(array);
 
 
         return managedArray;
         return managedArray;
     }
     }
@@ -59,6 +61,7 @@ internal sealed class SkParagraph : IDisposable
             managedArray[i] = Marshal.PtrToStructure<SkRect>(ptr);
             managedArray[i] = Marshal.PtrToStructure<SkRect>(ptr);
         }
         }
 
 
+        Marshal.FreeHGlobal(array);
         return managedArray;
         return managedArray;
     }
     }
     
     
@@ -76,6 +79,7 @@ internal sealed class SkParagraph : IDisposable
             managedArray[i] = Marshal.PtrToStructure<SkRect>(ptr);
             managedArray[i] = Marshal.PtrToStructure<SkRect>(ptr);
         }
         }
 
 
+        Marshal.FreeHGlobal(array);
         return managedArray;
         return managedArray;
     }
     }