Список структур или набор данных в C #? - PullRequest
2 голосов
/ 14 марта 2009

У меня есть данные, с которыми я хочу работать. Две строки и два числа, и я скажу 8000 строк данных.

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

Будет ли большая разница в производительности между списком и набором данных?

Ответы [ 3 ]

6 голосов
/ 14 марта 2009

DataSet s и DataTable s часто бывают более многословными и имеют некоторые накладные расходы для доступа, но, как правило, могут взаимодействовать с любыми типами привязки данных, которые вы используете.

Если у вас есть выбор (т. Е. Вы не привязаны к какому-либо компоненту, который использует DataTable s), я настоятельно рекомендую использовать соответствующую строго типизированную коллекцию, такую ​​как универсальный List, Dictionary или SortedDictionary. Я предполагаю, что гибкость и прозрачность принесут вам пользу в долгосрочной перспективе, если ваш проект будет долгим.

P.S. Две строки и два числа достаточно велики, поэтому я сомневаюсь, что вы получите какую-то выгоду от использования struct вместо класса. Конечно, вы должны профилировать это для себя, но это моя интуиция. Я согласен с постом, в котором говорится, что вы должны быть уверены, что понимаете фундаментальные различия между ними, если это случай преждевременной оптимизации.

3 голосов
/ 14 марта 2009

Хорошо, я экстраполирую на основе ограниченных данных, но тот факт, что вы спрашиваете между списком структур и набором данных, подразумевает для меня, что вы несколько новичок в C # и не были ознакомлены с тем фактом, что struct является ValueType и, следовательно, живет в стеке. Вы, наверное, слышали, что структура предоставляет вам «лучшую производительность» где-то, и хотите получить максимальную производительность из списка из 8000 элементов.

Во-первых, я считаю, что вы преждевременно оптимизируете. Не. Делайте все, что работает в рамках вашей программы. Если вы создаете этот список из 8000 элементов самостоятельно программно, возможно, из XML или плоского файла, я бы предложил вам использовать список объектов , так как это будет самым простым для против вас. Ваше сообщение не означает, что у вас есть связь между двумя табличными наборами данных, поэтому набор данных будет ненужным.

Тем не менее, если вы каким-то образом получаете этот список из базы данных, а ваш текущий уровень данных - ADO.NET 2.0 (и поэтому возвращает DataSets и DataTables), то я бы сказал, использовать это. Если вы получаете список из базы данных, но уровень данных еще не определен, я бы посоветовал вам изучить LINQ to SQL или Entity Framework .

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

0 голосов
/ 14 марта 2009

Зависит от того, что для вас значит «работать с». Если бы я отображал данные в DataGridView или каком-либо другом элементе управления, например, я бы выбрал маршрут DataSet / DataTable. Предоставляет вам возможность легко фильтровать данные.

Опять же, разница в производительности между List и DataSet зависит от того, что вы делаете. Списки отлично подходят для перебора контейнера и тому подобного. DataSets и DataTables предоставляют простые операции, такие как ReadXML () (конечно, при условии, что у вас есть данные в XML), которые будут принимать ваши элементы, создавать столбцы и заполнять строки для вас. Это довольно удобно.

Если вы не работаете на довольно ограниченном оборудовании или не занимаетесь другими потоками / процессами, 8000 элементов на самом деле не очень большой объем данных. Я бы выбрал свой контейнер на основе того, что я планировал с ним делать. Если бы я использовал привязку данных, я бы выбрал DataSet.

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