Выбор действительно не зависит от самого C #. Это сводится к балансу между:
- Как часто вы используете данные в своем коде?
- Изменяются ли когда-либо данные (и вас это волнует):
- Какова относительная (временная) стоимость повторного получения данных по сравнению со всем, что делает ваш код?
- Насколько вы цените производительность против усилия разработчика / время (для данного конкретного приложения)?
Как правило: для производственных приложений, где данные меняются не часто, я бы, вероятно, однажды создал DataTable, а затем удержал бы ссылку, как вы упомянули. Я бы также подумал о том, чтобы поместить данные в типизированную коллекцию / список / словарь вместо универсального класса DataTable, если не более того, потому что компилятору легче поймать мои ошибки при печати.
Для простой утилиты, которую вы запускаете для себя, которая «начинает, делает свое дело и заканчивает», это, вероятно, не стоит усилий.
Вы спрашиваете о Windows CE. В этом случае я бы, скорее всего, сделал запрос только один раз и держал результаты. Мобильные ОС имеют дополнительные ограничения в батареях и пространстве, которых нет в настольном программном обеспечении. По сути, мобильная ОС делает марку № 4 гораздо более важной.
Каждый раз, когда вы добавляете другой вызов извлечения из SQL, вы делаете вызовы во внешние библиотеки чаще, что означает, что вы, вероятно, работаете дольше, выделяете и освобождаете больше памяти (что добавляет фрагментацию), и, возможно, вызываете повторное выполнение базы данных. прочитать из флэш-памяти. Скорее всего, гораздо лучше держать данные, как только они у вас есть, при условии, что вы можете это сделать (см. пул № 2).