Drawing multiple Images 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 &lt; sizeX; chunkX++)
        {
            for (int chunkY = 0; chunkY &lt; sizeY; chunkY++)
            {
                int xChunk = chunkX + CamXCh - 1,
                    yChunk = chunkY + CamYCh - 1;

                long idChunk = xChunk + ((long)yChunk &lt;&lt; 32);

                if (allChunks.ContainsKey(idChunk))
                {
                    loadedChunks++;
                    Chunks currentChunk = allChunks[idChunk];
                    List&lt;CeldsChunk&gt; celds = currentChunk.MapChunk;

                    // Draw Ground
                    for(int celdIndex = 0; celdIndex &lt; 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&lt;Point, Image&gt; 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 &gt;&gt; 2) + (siz &gt;&gt; 1), posY - h + siz, w, h));
            g.DrawImage(ips, new Rectangle(posX - (h &gt;&gt; 2) + (siz &gt;&gt; 1), posY - h + siz, w, h));
        }
Naming

What is the difference between xChunk and chunkX? yChunk and chunkY? Choose names that will help, not hinder you.

Don't skimp on letters. size is better than siz, point is better than kps. Almost anything is better than step2. On the other hand, chunks is better than allChunks, chunk is better than currentChunk.

Class names are usually singular -- see for instance Point, Color, Rectangle. Follow the pattern and rename Chunks to Chunk.

The names Chunk and CeldsChunk don't convey anything to me -- that might be because I have no domain knowledge of what you're doing, or it might be because their names can be improved.

Commented-out code

It's confusing. Is it a failed attempt? Commented out for performance testing? No-one knows. If you might need it later, save it on a new branch. Otherwise, delete it.

Conventions

Follow C# conventions. Install StyleCop and listen to its recommendations.

Performance

Profiling is your best bet. You can try things like moving repeated calculations out of loops, as I suggested in the comment, but it's possible you're just asking too much of the computer. You're drawing up to sizeX * sizeY * ? images, and the solution might be to make do with fewer images.