Во-первых, избавитесь от DataTable для этих данных. Его использование памяти здесь огромно.
Если ваши данные всегда равны 0/1, наиболее эффективным способом может быть бит-маска.
Если ваши данные не только 0/1, создайте структуру, которая будет абстрагировать все ваши столбцы.
Вот концептуальный прототип этой структуры данных.
class MyData {
public MyData(int[] columns, object[] data) {
_columns = columns;
_data = data;
}
int[] _columns;
object[] _data;
public object this[int column] {
get {
int index = IndexOf(column);
return index != -1 ? _data[index] : null;
}
}
private int IndexOf(int column) {
for (int i = 0; i < _columns.Length; i++)
if (_columns[i] == column)
return i;
return -1;
}
}
Вы также можете сохранить память для _columns, применив шаблон flyweight.
Надеется, что это помогает
Вы только сохраняете 1 или другие данные и как вам нужно получить данные после этого? Агрегация, прямой поиск? –
Какая плотность ожидается? Похоже, что это большая матрица со значениями, идущими вниз по диагонали? Может ли он быть оптимизирован для особого случая (например, разрешен ли он?) Или он должен оставаться достаточно общим для «не разреженной» матрицы? – 2010-07-22 07:23:02