diff --git a/Program.cs b/Program.cs index 4ab5e20..7723201 100644 --- a/Program.cs +++ b/Program.cs @@ -187,9 +187,10 @@ public class Photo { image = tmp; } - public void Unload() { + public async void UnloadAsync() { + Loaded = false; if (texture != placeholder) { - texture.Dispose(); + await Task.Run( () => { texture.Dispose(); }); texture = placeholder; } } @@ -703,19 +704,15 @@ public class Game : GameWindow { int maxLoadedImage = Math.Min(photoIndex + 20, photos.Count - 1); // First, unload images that are far outside our window. // FIXME: also cancel any in-progress loading tasks that have moved outside our window. - Stopwatch stopwatch = new Stopwatch(); - stopwatch.Start(); + // FIXME: maybe use an LRU cache for evicting images? + // FIXME: keep around thumbnail-sized textures? foreach (int i in loadedImages) { if (i < minUnloadedImage || i > maxUnloadedImage) { - loadedImages.Remove(i); - photos[i].Unload(); // Console.WriteLine("unloading " + i); + loadedImages.Remove(i); + photos[i].UnloadAsync(); } } - stopwatch.Stop(); - if (stopwatch.Elapsed.TotalMilliseconds > 1) { - Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds); - } // Then, start loading any images that aren't in our window. for (int i = minLoadedImage; i <= maxLoadedImage; i++) {