Я использую SharpDX, чтобы нарисовать список растровых изображений. Я создал форму главного меню, чтобы выбрать, какие растровые изображения будут рисоваться. После этого откроется новая форма для создания DX-устройства, фабрики, свопчейна и так далее. Затем растровые изображения будут нарисованы на новой форме. Все растровые изображения сохраняются в LinkedList. Затем я могу использовать свой Unload (), чтобы выгрузить его и удалить из списка.
public void Unload() {
lock (this) {
locked = true;
lock (loadedList) { // loadedList is the LinkedList contains all the bitmaps (100 bitmaps).
loadedList.Remove(this);
}
if (Bitmap != null) {
Bitmap.Dispose();
Bitmap = null;
}
}
locked = false;
}
public static void UnloadAll() {
lock(loadedList) {
while (loadedList.Count > 0) {
loadedList.Last.Value.Unload();
}
}
}
Когда я собираюсь выйти, я выгружаю все растровые изображения и немедленно закрываю форму DX . Однако память не освобождается. Сейчас работает только моя форма главного меню, но все еще освобождается много памяти НЕ . Вот диаграмма памяти: Немедленное закрытие формы DX
Затем я попробовал еще раз. Когда я собираюсь выйти, я просто выгружаю все растровые изображения, но не закрываю форму DX. Я продолжаю запускать Render l oop и просто BeginDraw () и EndDraw (). Но на этот раз я обнаружил, что память освобождается, а не сразу . Примерно так: Диаграмма памяти из VS Как видите, после того, как я выгружаю все растровые изображения, память просто падает, но НЕ до самого низкого уровня. Через 3 секунды он снова начнет падать и восстановится до нормального уровня, это падение происходит автоматически. Если я закрою форму сразу , этого не произойдет. Вот и мне интересно, как выпустить это сразу . Если я не могу, как мне дождаться второго релиза, а затем закрыть форму DX? Между прочим, некоторые большие 3D-игры зависают на некоторое время при выходе, они ждут второго релиза?
Я сделал 4 снимка при запуске: 4 снимка 1-й когда загружаются все растровые изображения. 2-й - когда я выгружаю все растровые изображения, теперь память не была освобождена: Сравнить с 1-м снимком 3-й - это когда память впервые выпадает: Сравнить со 2-м снимком 4-й - когда память вторая капля: Сравните с 3-м снимком