Frage

Ich schreibe eine Klasse eine Zeile aus einer SQL-Abfrage zu repräsentieren. Ich mag die Felddaten über die Indexer Eigenschaft der Klasse zugegriffen werden. Das ist einfach genug, wenn ich die Daten in eine interne Liste des Objekts laden. Ich habe dies bereits versucht und bin nicht mit dem Boxen für den Primitiven glücklich. Boxen erhöht den Speicherbedarf um 20%. Ich möchte die Primitiven als Primitive in der Klasse speichern. Die Datentabelle Klasse speichert Primitive von Arrays für jede Spalte in dem Schema von zurück IDataReader erzeugen. Ich implementiert diese Weise wird eine Klasse, aber ich würde die Daten lieber mit dem Zeilenobjekt gespeichert werden, anstatt in einer Spalte, die durch die Reihe intern verwiesen wird.

Irgendwelche Ideen auf, dies zu erreichen?

War es hilfreich?

Lösung

Sie können Strukturtyp erzeugen eine Zeile darzustellen. Es kann dynamisch erfolgen und es ist möglich, es zu tun, so wird es keine Boxen sein. Ich bin nicht sicher, ob es wert ist die Anstrengung, obwohl

Andere Tipps

Nur 20% Overhead? Du hast Glück! Ich habe einige Code gereinigt, wo es eine fourty fache Leistungsabnahme hinzugefügt (nicht mitgerechnet die Auswirkungen des zusätzlichen Speicher)! Wie auch immer, die typische Art und Weise object zu verhindern, besteht darin, durch Verwendung von Generika zu starten. Hier ist ein vereinfachtes Beispiel:

class RowRepresenter<T>
{
    //....
    public T this[int index] {get; set;}  // implementation left out
}

// initialize, suppose the properties (indexers) should be ints:
RowRepresenter<int> myInstance = new RowRepresenter<int>();
myInstance.LoadData();

// get data (i.e., your indexer)
int somefield = myInstance[2];   // no overhead, no casting required
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top