C# C语言中的块生成性能#

C# C语言中的块生成性能#,c#,performance,optimization,C#,Performance,Optimization,我正在用C#编写一个游戏,这个游戏会在你移动时生成新的块(无限)。 如果在我的列表中有>1000个块,它会变得滞后,但我只在屏幕上加载必要的块。尝试了所有的方法来改进代码,但是没有什么新的:S Stopwatch ChunkDetect = new Stopwatch(); public readonly int sizeChunk = 800; private void loadChunks() { ChunkDetect.Restart();

我正在用C#编写一个游戏,这个游戏会在你移动时生成新的块(无限)。 如果在我的列表中有>1000个块,它会变得滞后,但我只在屏幕上加载必要的块。尝试了所有的方法来改进代码,但是没有什么新的:S

Stopwatch ChunkDetect = new Stopwatch();
public readonly int sizeChunk = 800;

    private void loadChunks()
    {
        ChunkDetect.Restart();
        ChunkDetect.Start();
        int CamXCh = Convert.ToInt32(Math.Ceiling(-Convert.ToDouble(CameraX) / sizeChunk)),
            CamYCh = Convert.ToInt32(Math.Ceiling(-Convert.ToDouble(CameraY) / sizeChunk));

        int sizeX = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(gameBox.Width) / sizeChunk)) + 4,
            sizeY = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(gameBox.Height) / sizeChunk)) + 4;

        Random generation = new Random();
        // Load Chunks or Create
        for (int chunkX = 0; chunkX < sizeX; chunkX++)
        {
            for (int chunkY = 0; chunkY < sizeY; chunkY++)
            {
                int xChunk = chunkX + CamXCh - 2,
                    yChunk = chunkY + CamYCh - 2;

                Chunks currentChunk = allChunks.Where(i => i.positionX == xChunk && i.positionY == yChunk).FirstOrDefault();

                bool isLoad = true;
                if (chunkX == 0 || chunkX == (sizeX - 1) || chunkY == 0 || chunkY == (sizeY - 1))
                    isLoad = false;

                if (currentChunk == null)
                {
                    Color ColorBiome = Color.FromArgb(64, 233, 56);
                    string BiomeName = "Grass";
                    allChunks.Add(new Chunks(xChunk, yChunk, sizeChunk, ColorBiome, BiomeName, isLoad, 40));
                }
                else
                {
                    bool isCurrentLoaded = currentChunk.isLoaded;
                    if (!isLoad)
                        currentChunk.isLoaded = false;
                    else if (!isCurrentLoaded)
                        currentChunk.isLoaded = true;
                }
            }
        }
        ChunkDetect.Stop();
    }
Stopwatch ChunkDetect=新秒表();
公共只读int sizeChunk=800;
私有void loadChunks()
{
ChunkDetect.Restart();
ChunkDetect.Start();
int CamXCh=Convert.ToInt32(数学上限(-Convert.ToDouble(CameraX)/sizeChunk)),
CamYCh=Convert.ToInt32(数学上限(-Convert.ToDouble(CameraY)/sizeChunk));
int sizeX=Convert.ToInt32(数学上限(Convert.ToDouble(gameBox.Width)/sizeChunk))+4,
sizeY=Convert.ToInt32(数学上限(Convert.ToDouble(gameBox.Height)/sizeChunk))+4;
随机生成=新随机();
//加载块或创建
对于(int chunkX=0;chunkXi.positionX==xChunk&&i.positionY==ycchunk.FirstOrDefault();
bool isLoad=true;
如果(chunkX==0 | | chunkX==(sizeX-1)| | chunkY==0 | | chunkY==(sizeY-1))
isLoad=false;
如果(currentChunk==null)
{
Color ColorBiome=来自ArgB的颜色(6423356);
字符串BiomeName=“Grass”;
添加(新块(xChunk、ycchunk、sizeChunk、colorbome、BiomeName、isLoad、40));
}
其他的
{
bool iscurrentloadded=currentcunk.isLoaded;
如果(!isLoad)
currentChunk.isLoaded=false;
如果(!isCurrentLoaded),则为else
currentChunk.isLoaded=true;
}
}
}
ChunkDetect.Stop();
}

那么您的实际问题是什么?请记住,StackOverflow不是一项代码优化服务。即使它是,这种方法也不会告诉任何人任何事情。嘿,用户,请学习如何使用探查器,只有这样您才能确定滞后的原因。您也可以在coderevoew中询问代码优化。什么类型的
allChunks
?在使用数组或字典查找时,您似乎正在进行线性搜索以查找任何匹配的块,这样会快得多。Mi的问题是,创建类似linq的块currentChunk=allChunks更容易。其中(i=>i.positionX==xChunk&&i.positionY==yChunk)。FirstOrDefault();or和带x和y线的二元或二维阵列?