Как предоставить списки подсказок в приложении NHibernate WinForms - PullRequest
1 голос
/ 22 октября 2009

Фон

Приложение WinForms, использующее NHibernate. Приложение выполнено в стиле MDI, и каждая дочерняя форма MDI открывает новый сеанс NHibernate при загрузке, который остается открытым в течение всего срока службы формы.

Вопрос

Мое приложение, по сути, представляет собой систему управления заказами или закупками. Одна конкретная форма использует много списков поиска. Как список продуктов, список поставщиков, список местоположений, список UnitsOfMeasurement, список PriceQuotes и т. Д.

Множество списков, которые загружаются при создании формы.

Проблема: Мне нужны списки поиска, но мне нужно, чтобы форма загружалась немного быстрее. Форма занимает слишком много времени, чтобы выполнить все поиски. Как повысить производительность и сохранить списки поиска?

Мои мысли

  • Можно ли один раз загрузить списки поиска и удерживать их в течение всего срока службы приложения, а также периодически проверять, не устарели ли списки?

  • Могу ли я загрузить только текстовое описание для списков, и вместо хранения группы IList, IList и т. Д. Я могу сохранить группу IList, а затем при сохранении выполнить операции Gets против NHibernate для получить реальный объект.

  • Есть какой-то другой подход, о котором я просто не подумал?

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Вы должны определенно кэшировать медленно меняющиеся данные для повышения производительности. Как часто вам нужно проверять устаревшие данные, зависит от типа данных и вашего бизнеса, например, Единицы измерения, вероятно, не меняются так часто, как список продуктов. Вы также должны предоставить метод для обновления списков вручную, чтобы пользователь мог обновить их, если что-то отсутствует.

Если вам нужны бизнес-объекты в списке для выполнения операций с базой данных, вы можете вызвать ISession.Lock (obj), чтобы заблокировать объект в текущей ISession. Следует помнить одну вещь: блокировка не может автоматически касаться дочерних объектов: я думаю, что для этого есть настройка сопоставления, или вы можете сделать это вручную.

1 голос
/ 22 октября 2009

Вы отправляете списки полных объектов в свой интерфейс? Недавно я работал над приложением, использующим DTO между уровнем данных и пользовательским интерфейсом, поэтому я не посылаю полный объект, просто описание и идентификатор. Это может помочь вам обрезать некоторые ненужные данные. Таким образом, в основном, когда экран загружает вызов службы, nhibernate получает все объекты, которые я хочу для моего списка, а затем интерфейс связывается со списком. Я привязал свой элемент отображения списка к описанию, а элемент значения к идентификатору.

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