Im trying to draw a lot of fields image for my world generation, all is perfect 64 fps, but if i began to draw all the time the grass it became laggy, like 59 fps (something that musn't happen! :( ), i need help and some tricks to draw things in c# with more optimization :)int loadedChunks = 0;        for (int chunkX = 0; chunkX < sizeX; chunkX++)        {            for (int chunkY = 0; chunkY < sizeY; chunkY++)            {                int xChunk = chunkX + CamXCh - 1,                    yChunk = chunkY + CamYCh - 1;                long idChunk = xChunk + ((long)yChunk << 32);                if (allChunks.ContainsKey(idChunk))                {                    loadedChunks++;                    Chunks currentChunk = allChunks[idChunk];                    List<CeldsChunk> celds = currentChunk.MapChunk;                    // Draw Ground                    for(int celdIndex = 0; celdIndex < celds.Count; celdIndex++)                    {                        CeldsChunk celd = celds[celdIndex];                        Point cord = celd.cords;                        int sizeCL = cord.size,                            CeldX = xChunk * sizeChunk + CameraX + cord.posX * sizeCL,                            CeldY = yChunk * sizeChunk + CameraY + cord.posY * sizeCL,                            sizeCeld = cord.size;                        Color celdType = celd.type;                        //SolidBrush brsh = new SolidBrush(celdType);                        g.DrawImage(grass, new Rectangle(CeldX, CeldY, sizeCeld, sizeCeld));                        //Image sk = celd.img;                        //if (sk != null)                        //    step2.Add(new Point(CeldX, CeldY, sizeCeld), sk);                    }                }            }        }        // Step 2  Draw Forest        foreach (KeyValuePair<Point, Image> s in step2)        {            Point kps = s.Key;            Image ips = s.Value;            int posX = kps.posX,                posY = kps.posY,                siz = s.Key.size,                w = ips.Width,                h = ips.Height;            //g.DrawRectangle(Pens.Red, new Rectangle(posX, posY, siz, siz));            //g.DrawRectangle(Pens.Blue, new Rectangle(posX - (h >> 2) + (siz >> 1), posY - h + siz, w, h));            g.DrawImage(ips, new Rectangle(posX - (h >> 2) + (siz >> 1), posY - h + siz, w, h));        }
Drawing multiple Images
c#;optimization;animation