Итак, даже если я не вызову Dispose (), CLR в конечном итоге вызовет его в другой раз.
Метод Finalizer и метод Dispose - это две разные вещи.Это «должно» сделать это, но вы не можете сказать наверняка, что так и будет.Вы не можете предполагать это, вам придется проверять в каждом конкретном случае.Из того, что вы говорите, в данном случае это звучит так, как будто это так.
Разве это плохо, если я просто позволю растровым изображениям оставаться такими, как они есть, и пусть финализатор позаботится о них?
Да, потому что указание финализатора вызывает дополнительную работу для сборщика мусора.Он будет автоматически продвигаться к следующему поколению CG, то есть ресурсы не будут высвобождены так скоро, как могли.Обычно, когда кто-то реализует Dispose, он подавляет вызов финализатора, что предотвратит это.
Каждый раз, когда объект реализует IDisposable, он должен быть заключен в оператор using.
using(var bitmap = new BitMap())
{
....
}
В этом случаеТак как метод dispose находится в финализаторе, и вам действительно это нужно, вы не можете использовать метод dispose и позволить финализатору позаботиться об этом.Это не хорошо, но вы можете сделать это.Исходя из того, что вы говорите, это может быть лучшим вариантом действий без рефакторинга кода.