В последнее время мне пришлось выполнять очень сложные операции с данными, хранящимися в наборе данных. Он был достаточно тяжелым, и в итоге я использовал инструмент, помогающий выявить некоторые узкие места в моем коде. Когда я анализировал узкие места, я заметил, что, хотя поиск в DataSet не был ужасно медленным (они не были узким местом), он был медленнее, чем я ожидал. Я всегда предполагал, что DataSets использует какую-то реализацию стиля HashTable, которая будет выполнять поиск O (1) (или, по крайней мере, это то, что я считаю HashTables). Скорость моих поисков оказалась значительно ниже этой.
Мне было интересно, если кто-нибудь, кто знает что-либо о реализации класса .NET DataSet, захочет поделиться тем, что он знает.
Если я сделаю что-то вроде этого:
DataTable dt = new DataTable();
if(dt.Columns.Contains("SomeColumn"))
{
object o = dt.Rows[0]["SomeColumn"];
}
Насколько быстрым будет время поиска для метода Contains(...)
и для извлечения значения для хранения в Object o
? Я бы подумал, что это будет очень быстро, как HashTable (при условии, что я понимаю о HashTables правильно), но это не похоже на это ...
Я написал этот код из памяти, поэтому некоторые вещи могут не быть «синтаксически правильными».