Dictionary<int,object[]>
будет лучше, чем List<Dictionary<string, object>>
. Вам не нужен словарь для каждой строки, так как имена столбцов одинаковы для всех строк. И если вы хотите, чтобы он был легким, вы должны использовать индексы столбцов вместо имен.
Так, если у вас есть столбец «Имя», который является 3-м столбцом, чтобы получить его значение «Имя» из идентификатора строки 10, код будет:
object val = table[10][2];
Другой вариант - SortedList<int,object[]>
... в зависимости от способа доступа к данным (только прямой или произвольный доступ).
Вы также можете использовать MultiDictionary<int,object>
из PowerCollections .
С точки зрения использования памяти, я думаю, что лучшим вариантом будет использование массива с одним измерением и некоторой свободной емкостью. Таким образом, после каждой, скажем, 100 строк, вы должны создать новый массив, скопировать в него старое содержимое и оставить в конце 100 пустых строк. Но вам придется сохранять какой-то индекс при удалении строки, чтобы она помечалась как удаленная без изменения размера массива.