public void NativeLoaderBenchmark() { using (var ldr = new TlgLoader(_tlgBytes)) { int w = ldr.Bitmap.Width; ldr.Bitmap.Dispose(); } }
static void MemoryTest() { var target = File.Exists("test.tlg") ? "test.tlg" : "NewGame5.tlg"; TlgImageConverter converter = new TlgImageConverter(); var original = File.ReadAllBytes(target); Console.WriteLine("TLG bytes loaded."); Console.ReadLine(); //Pure managed! using (var ms = new MemoryStream(original)) { using (BinaryReader br = new BinaryReader(ms)) { Bitmap b = converter.Read(br); b.Dispose(); } } Console.WriteLine("Managed done."); Console.ReadLine(); GC.Collect(); using (TlgLoader ldr = new TlgLoader(original)) { Bitmap b = ldr.Bitmap; b.Dispose(); } //You can still access b's properties here (out of `using` scope) if you don't dispose it, //but you can not call `Save` or `LockBits` etc. because the data is deleted. Console.WriteLine("NativeLoader done."); Console.ReadLine(); GC.Collect(); //By default `ToBitmap` copies data to managed side so you can call `Save` as you want. //Set `useUnmanagedScan0 = true` to make it behave like TlgLoader but no one deletes the data!! Bitmap b2 = TlgNative.ToBitmap(original, out _); b2.Dispose(); Console.WriteLine("NativeCopy done."); Console.ReadLine(); GC.Collect(); Console.WriteLine("All done."); Console.ReadLine(); }