Как уже говорили другие, у вас утечка памяти, так как вы не утилизируете изображения.Примечание: обычно память неиспользуемых объектов автоматически освобождается в C #, но изображения являются особыми, так как они являются COM-объектами, то есть не .NET-объектами.
Вместо загрузки изображений снова и снова, загрузите их один раз.Поскольку одни и те же изображения используются на протяжении всей игры, вам не нужно их утилизировать.
public static int cookiecount;
public static Random random = new Random();
public static Image[] images;
// Call this once at program start.
public static LoadImages()
{
string[] files = Directory.GetFiles(Application.StartupPath, "*.png");
images = new Image[files.Length];
for (int i = 0; i < files.Length; i++) {
images[i] = Image.FromFile(files[i]);
}
}
public static void Draw(System.Drawing.Graphics g, int x, int y)
{
int index = random.Next(0, images.Length);
g.DrawImage(images[index], x, y, 40, 40);
cookiecount++;
}
Для массивов используйте свойство Length
вместо вызова метода расширения Count()
.Это более эффективно.
Кроме того, обработка исключений должна быть перемещена в LoadImages()
.Ради простоты я не показывал это здесь.