Entfernen Sie zunächst die DataTable für diese Zählungen von Daten. Sein Speicherverbrauch ist hier viel zu groß.
Wenn Ihre Daten immer 0/1 sind, sollte die effizienteste Methode eine Bitmaske sein.
Wenn Ihre Daten nicht nur 0/1 sind, erstellen Sie eine Struktur, die alle Ihre Spalten abstrahiert.
Hier ist ein konzeptioneller Prototyp dieser Datenstruktur.
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;
}
}
Sie könnten zusätzlich den Speicher für die _columns sparen, indem Sie das Flyweight-Muster anwenden.
Ich hoffe, das hilft
0 Stimmen
Speichern Sie nur 1en oder auch andere Daten, und wie müssen Sie die Daten anschließend abrufen? Aggregation, direktes Nachschlagen?
0 Stimmen
Welche Art von Dichte wird erwartet? Es scheint sich um eine große Matrix mit Werten entlang der Diagonalen zu handeln? Kann sie für einen Spezialfall optimiert werden (ist sie z. B. gelöst?) oder muss sie allgemein genug für eine "nicht spärliche" Matrix bleiben?