Beispiel #1
0
 public void NativeLoaderBenchmark()
 {
     using (var ldr = new TlgLoader(_tlgBytes))
     {
         int w = ldr.Bitmap.Width;
         ldr.Bitmap.Dispose();
     }
 }
Beispiel #2
0
        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();
        }