1

SQL クエリの行を表すクラスを作成しています。クラスのインデクサー プロパティを介してフィールド データにアクセスできるようにします。オブジェクトの内部リストにデータをロードすれば、これは簡単です。私はすでにこれを試しましたが、プリミティブのボクシングに満足していません。ボクシングにより、メモリ要件が 20% 増加します。プリミティブをプリミティブとしてクラスに保存したいと思います。DataTable クラスは、IDataReader から返されたスキーマの列ごとに配列を作成することにより、プリミティブを格納します。この方法でクラスを実装しましたが、行によって内部的に参照される列ではなく、行オブジェクトにデータを格納することをお勧めします。

これを達成するためのアイデアはありますか?

4

2 に答える 2

2

行を表す構造タイプを生成できます。それは動的に行うことができ、ボクシングがないように行うことができます。努力する価値があるかどうかはわかりませんが

于 2009-12-03T21:02:39.800 に答える
2

わずか 20% のオーバーヘッドですか? 幸運ですね!40 倍のパフォーマンス低下を追加したコードをクリーンアップしました (余分なメモリの影響は考慮していません)。とにかく、使用を防ぐ典型的な方法objectは、ジェネリックの使用を開始することです。簡単な例を次に示します。

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
于 2009-12-03T21:00:27.633 に答える