我正在编写一个类来表示 SQL 查询中的一行。我希望通过类的 indexer 属性访问字段数据。如果我将数据加载到内部对象列表中,这很简单。我已经尝试过这个并且对原始人的拳击不满意。拳击增加了 20% 的内存需求。我想将原语存储为类中的原语。DataTable 类通过为从 IDataReader 返回的架构中的每一列创建数组来存储基元。我以这种方式实现了一个类,但我更喜欢将数据与行对象一起存储,而不是存储在行内部引用的列中。
有什么想法可以做到这一点吗?
只有 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
您可以生成结构类型来表示一行。它可以动态完成,并且可以这样做,因此不会有任何拳击。我不确定这是否值得努力