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