2008-09-17 4 views
2

Я опытный программист в унаследованном (но объектно-ориентированном) инструменте разработки и переключаюсь на C# /. Net. Я пишу небольшое однопользовательское приложение с использованием SQL-сервера CE 3.5. Я прочитал концептуальный DataSet и связанный с ним документ, и мой код работает.Сколько объектов DataTable следует использовать в моем приложении C#?

Теперь я хочу убедиться, что я делаю это «правильно», получаю отзывы от опытных кодировщиков .Net/SQL Server, которые вы не получаете от чтения документа.

Я заметил, что у меня есть код, как это в нескольких местах:

var myTableDataTable = new MyDataSet.MyTableDataTable(); 
myTableTableAdapter.Fill(MyTableDataTable); 

... // other code 

В одном приложении пользователя, вы, как правило, только сделать это один раз, когда запускается приложение, экземпляр DataTable объекта для каждого таблицу, а затем сохранить ссылку на нее, чтобы вы когда-либо использовали этот единственный объект, который уже заполнен данными? Таким образом, вы могли бы только читать данные из db один раз вместо потенциально многократно. Или накладные расходы этого настолько малы, что это просто не имеет значения (плюс может быть контрпродуктивным с большими столами)?

+0

Если вы переходите на .NET, я предлагаю пропустить ADO и посмотреть на Linq. – Will 2008-09-17 20:57:16

ответ

3

Для CE это, вероятно, не проблема. Если вы нажимаете это приложение тысячам пользователей, и все они попадают в централизованную базу данных, вы можете потратить некоторое время на оптимизацию. В однопользовательском экземпляре DB, таком как CE, если у вас нет данных, которые говорят, что вам нужно оптимизировать, я бы не стал беспокоиться об этом. Преждевременная оптимизация и т.д.

0

Путь решить Варис между 2-х основными несколькими вещами 1. Является ли данные собирается быть доступ к постоянно 2. Есть много данных

Если вы constanty с использованием данных в таблицах, затем загрузите их при первом использовании. Если вы только время от времени используете данные, заполните таблицу, когда вам это нужно, а затем отбросьте ее.

Например, если у вас есть 10 экранов gui и используйте только один файл myTableDataTable, прочитайте его только на этом экране.

0

Выбор действительно не зависит от самого C#. Это сводится к балансу между:

  1. Как часто вы используете данные в своем коде?
  2. Имеют ли данные когда-либо изменения (и вам все равно, если это так)?
  3. Какова относительная (временная) стоимость получения данных снова, по сравнению со всем остальным, что делает ваш код?
  4. Сколько стоит надеть Производительность, против Дефицит усилий/времени (для этого конкретного приложения)?

Как правило, для производственных приложений, где данные не меняются часто, я, вероятно, создавал бы DataTable один раз, а затем удерживал бы ссылку, как вы упоминаете. Я бы также подумал о том, чтобы помещать данные в типизированный набор/список/словарь вместо общего класса DataTable, если ничего другого, потому что проще позволить компилятору поймать ошибки ввода.

Для простой утилиты вы запускаете для себя, что «начинает, делает свою вещь и кончается», это, вероятно, не стоит усилий.

Вы спрашиваете о Windows CE. В этой конкретной заботе я, скорее всего, сделаю запрос только один раз и придержусь к результатам.У мобильных ОС есть дополнительные ограничения в батареях и пространстве, которых нет у настольного программного обеспечения. В принципе, мобильная ОС делает пулю # 4 гораздо более важной.

Каждый раз, когда вы добавляете другой запрос на поиск из SQL, вы чаще вызываете внешние библиотеки, что означает, что вы, вероятно, работаете дольше, выделяя и освобождая больше памяти (что добавляет фрагментацию) и, возможно, перечитать из флэш-памяти. скорее всего, намного лучше удержать данные, как только вы их получите, предположив, что вы можете (см. bullet # 2).

0

Легче понять ответ на этот вопрос, когда вы думаете о наборах данных как о «сеансе» данных. Вы заполняете данные; вы работаете с ними; и затем вы поместите данные обратно или отмените их, когда закончите. Поэтому вам нужно задать следующие вопросы:

  1. Насколько актуальны данные? Вам всегда нужно иметь самое последнее, или база данных не изменится так часто?
  2. Для чего вы используете данные? Если вы просто используете его для отчетов, вы можете легко заполнить набор данных, запустить отчет, а затем выбросить набор данных, а в следующий раз просто создать новый. Это даст вам больше текущих данных.
  3. Только сколько данных мы говорим? Вы сказали, что работаете с относительно небольшим набором данных, поэтому нет существенного влияния на память, если вы загрузите все это в память и держите его там навсегда.

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

Главное, что вам нужно учитывать в этом сценарии: Что делать, если приложение выходит из строя из-за сбоя, отключения питания и т. Д.? Пользователь потеряет всю свою работу? Но, как это бывает, наборы данных очень легко сериализуются, поэтому вы можете довольно легко реализовать процедуру «сохранить каждый так часто», чтобы сериализовать содержимое набора данных на диск, чтобы пользователь не потерял много работы.

Смежные вопросы