With the power of Claude free, will this memory still leak?

This commit is contained in:
barelyprofessional
2025-12-25 20:42:17 -06:00
parent a61d930c88
commit d2f06d30ed

View File

@@ -510,12 +510,12 @@ public class SlotsCommand : ICommand
using var animated = new Image<Rgba32>(500, 900); using var animated = new Image<Rgba32>(500, 900);
foreach (var rImg in frames) { foreach (var rImg in frames) {
var bytes = new byte[rImg.Width * rImg.Height * 4]; // FIX: Use Span to wrap unmanaged memory directly - NO ALLOCATION!
Marshal.Copy((IntPtr)rImg.Data, bytes, 0, bytes.Length); var span = new Span<byte>(rImg.Data, rImg.Width * rImg.Height * 4);
using var frame = SixLabors.ImageSharp.Image.LoadPixelData<Rgba32>(bytes, rImg.Width, rImg.Height); // LoadPixelData can work with Span directly
using var frame = SixLabors.ImageSharp.Image.LoadPixelData<Rgba32>(span, rImg.Width, rImg.Height);
frame.Frames.RootFrame.Metadata.GetWebpMetadata().FrameDelay = 2; frame.Frames.RootFrame.Metadata.GetWebpMetadata().FrameDelay = 2;
animated.Frames.AddFrame(frame.Frames.RootFrame); animated.Frames.AddFrame(frame.Frames.RootFrame);
// Note: frame is disposed automatically via 'using'
} }
if (animated.Frames.Count > 1) animated.Frames.RemoveFrame(0); if (animated.Frames.Count > 1) animated.Frames.RemoveFrame(0);