Альтернативная структура данных для DataTable - PullRequest
5 голосов
/ 17 февраля 2012

Мне нужна какая-то структура данных, чтобы сделать следующее:

Один «набор», состоящий из множества типов, таких как строка, целое число, дата и время. Многие наборы добавляются динамически Наборы извлекаются динамически при извлечении информации

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

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

Существует ли альтернативный тип данных, имеющий структуру данных с более высокой производительностью, который я могу использовать, или я должен создать свой собственный класс, используя списки <>?

Ответы [ 2 ]

6 голосов
/ 17 февраля 2012

В зависимости от вашего варианта использования, я бы рекомендовал использовать List<object[]> (поскольку вы упомянули динамическую схему) в качестве центральной структуры данных, но вам потребуется самостоятельно поддерживать информацию о схеме, если она понадобится вам позже.

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

Мы использовали этот подход в прошлом и смогли сэкономить 2/3 памяти и 80% времени выполнения при массовой обработке данных по сравнению с таблицами данных.

2 голосов
/ 25 декабря 2015

Один из альтернативных способов решения таких проблем: использование базы данных sqlite в памяти.

Поначалу это звучит странно, но вы можете поместить в таблицы довольно сложные структуры и получить всю мощь SQL для работы с вашими данными. SQLite - это крошечная библиотека, поэтому она не раздувает ваш код. Поначалу интеграция БД в ваш код может показаться странной, но производительность должна работать на огромных наборах данных (поскольку именно для этого созданы БД). И если вам когда-нибудь понадобится сохранить эти данные на диск, все готово.

В зависимости от деталей вашей проблемы, возможно, было бы даже неплохо перейти на больший конец базы данных (например, postgres), но здесь трудно сказать. Только не отрицай эту идею слишком легко.

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