C# 在透明的SDL表面上进行闪电扫描会导致很大的性能损失

C# 在透明的SDL表面上进行闪电扫描会导致很大的性能损失,c#,sdl,C#,Sdl,我使用的是SDLDotNet.dll 6.1.1(我认为是SDL1.2)。每当我连续快速地点到一个透明的表面上(例如当一个玩家快速点击时),它会以每秒5帧的速度下降(从350帧下降到5帧) 这是我的表面: ChunkSurface = new Surface(256, 256) {Transparent = true}; 和我的代码来更新块 if (ReRerenderPartial) { foreach

我使用的是SDLDotNet.dll 6.1.1(我认为是SDL1.2)。每当我连续快速地点到一个透明的表面上(例如当一个玩家快速点击时),它会以每秒5帧的速度下降(从350帧下降到5帧)

这是我的表面:

    ChunkSurface = new Surface(256, 256) {Transparent = true};
和我的代码来更新块

            if (ReRerenderPartial)
            {
                foreach (Point poin in ReRenderPoints)
                {
                    int ChunkX = poin.X;
                    int ChunkY = poin.Y;
                    int Block = Blocks[ChunkX, ChunkY];
                    var b = BaseBlock.blockList.Find(Block);
                    if (b.Surface().Transparent)
                    {
                        ChunkSurface.Fill(new Rectangle(new Point(poin.X * 16, poin.Y * 16), new Size(16, 16)), Color.Black);
                    }
                    if (Block > 0)
                    {
                        ChunkSurface.Blit(b.Surface(), new Point(poin.X*16, poin.Y*16));
                    }
                }
            }
如果我将“透明”设置为false,则单击“快速”(并需要重新渲染)时不会丢失FPS,但如果为true,则会丢失FPS。导致FPS损失的两个功能是Fill和Blit


如果您想看到它的实际效果,我的repo is@related file is Chunk.cs

我的坏,我没有清除渲染点列表,导致许多点在不需要重新渲染时被渲染,随着需要渲染的点的数量增加而增加

ReRenderPoints = new List<Point>();
ReRenderPoints=newlist();
在我的渲染函数结束时修复了它

谢谢。< / P>我不知道C是如何管理指针的,但是在C++中,在把指针附加到新的内存段之前,需要调用指针上的删除,以避免内存泄漏(数据留在内存中,内存在哪里)。