Каков наилучший метод для открытия множества различных классов в приложении? - PullRequest
1 голос
/ 13 ноября 2010

Вот сценарий:

При открытии приложения пользователю предлагается открыть «Проект»

Внутри проекта есть процессы, категории, задачи, документы и заметки.

Есть еще несколько, но давайте сделаем это проще.Большинство вышеперечисленных элементов являются списками, которые связаны с сетками или древовидными представлениями.

Каждый из них имеет отдельную таблицу базы данных и связан со значениями в базе данных.

Таким образом, после того, как пользователь открываетПроект Я мог бы сделать что-то вроде этого:

  1. Получить процессы, которые принадлежат проекту 'A'
  2. Получить категории, которые принадлежат каждому процессу
  3. Получить задачи, которые принадлежаткаждая категория
  4. Получить документы, которые принадлежат проекту «А»
  5. Получить заметки, которые относятся к проекту «А» и т. д.

В этом случаеПользователь закрывает этот проект. Мне нужно очистить каждый связанный элемент управления и очистить все связанные переменные, а затем быть готовым открыть другой проект.

Итак, я ищу несколько советов о том, как эффективно справляться с ситуацией такого типа.,

Я использую C # .Net, и приложение является приложением Windows Forms.

1 Ответ

2 голосов
/ 13 ноября 2010

Ну, как бы вы ни разрезали его, в какой-то момент распределение памяти, выполняемое при загрузке, должно быть очищено.

В зависимости от того, как вы осуществляете доступ к данным, вам может потребоваться сделать это вручную, или сборщик мусора .NET может позаботиться об этом за вас (скорее всего).

Для этого типа приложений (учитывая написанные вами ограниченные требования) я обычно реализую его как приложение MDI, чтобы вы могли одновременно открывать несколько проектов. Весь код загрузки / утилизации проекта будет выполняться через дочернее окно, поэтому каждый раз, когда дочернее окно закрывается, память очищается автоматически.

Даже если вы не / не можете использовать MDI, я настоятельно рекомендую вам следовать модели dispose-on-unload вместо того, чтобы сохранять ту же форму открытой и повторно инициализировать ее новыми данными. Последняя модель очень склонна к ошибочному поведению из-за длительных данных и / или состояния (что является ошибкой программиста, но действительно трудно или даже невозможно отследить при попытке воспроизвести проблему клиента). Я часто видел этот шаблон в WinForms, и это не очень приятно, когда элементы управления формой и бизнес-логика начинают усложняться. Заполните форму и начните снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...