Какой вид индексирования быстрее?
Какой вид индексирования быстрее?
Собственно - при доступе к данным в DataRow
можно индексировать порядковым номером, именем поля и колонкой данных.
Какой из них работает быстрее?
Может не по теме. Но надо не забывать про качество хостинга. Посмотрите книжку «Продвижение сайта в поисковых системах» (И.Ашманов, А.Иванов)
как всегда, забанили везде кроме этого раздела?
гугыл, а там что-нибудь вроде the fastest data indexing datarow
Это точно не по теме - нет у меня сайта.
Есть производная от DataRow и мне интересно какой индексер отрабатывает быстрее.
Тестить и/или искать в соурсниках сегодня не хочется...
можно индексировать порядковым номером, именем поля и колонкой данных.
Как это индех по колонке данных? А остальное по числовому полю или по строковому?
Еще бы дописал что для Оракла.
Ничего подобного пока не попадалось
https://stackoverflow.com/questions/212264/how-to-choose-a...
Было бы нужно для Оракла - Я бы написал что надо для Оракла.
Интересует для обычного DataRow.
Можно, конечно, протестировать или выкопать из соурсов, но может кто уже озабачивался...
Примерно так:
int column1 = 1;
DataColumn dc = table.Columns[column1];
String columnName = dc.ColumnName;
DataRow dr = dt.NewRow();
var a = dr[1];
var b = dr[dc];
var c = dr[columnName];
Вопрос - какой из индексеров шустрее?
Когда-то давно вроде самым шустрым был цифровой,
но билли пользует dc.
Вот Я и застрял с вопросом...
Видимо вторую линку придется брать за основу и писать тест с датаколумами.
зачем проверять очевидные вещи?
public object this[int columnIndex] { get { DataColumn column = _columns[columnIndex]; int record = GetDefaultRecord(); _table.recordManager.VerifyRecord(record, this); VerifyValueFromStorage(column, DataRowVersion.Default, column[record]); return column[record]; } } public object this[DataColumn column] { get { CheckColumn(column); int record = GetDefaultRecord(); _table.recordManager.VerifyRecord(record, this); VerifyValueFromStorage(column, DataRowVersion.Default, column[record]); return column[record]; } private void CheckColumn(DataColumn column) { if (column == null) { throw ExceptionBuilder.ArgumentNull("column"); } if (column.Table != _table) { throw ExceptionBuilder.ColumnNotInTheTable(column.ColumnName, _table.TableName); } }
А что именно предполагается очевидным?
Что:
DataColumn column = _columns[columnIndex];
быстрее:
CheckColumn(column);
оно совсем не очевидно - первое зависит от количества элементов, второе имеет фиксированное количество операциj.
Все же решил написать тест:
Table contain 8 fields
Generating data...
Data generated: 10000 rows in 54 miliseconds
Testing int indexer
Testing string indexer
Testing DataColumn indexer
int indexing
total: 33815.2 ms
each: 338.152ms
string indexing
total: 57607.1559 ms
each: 576.071559ms
DataColumn indexing
total: 17460.3316 ms
each: 174.603316ms
Так что придется мне слегка переделать кучку кода: 576 вс 174 - существенно...
В свете результатов теста возникает интересный вопросик:
- можно ли заменить DataColumnCollection Columns in DataTable другой, типизированной, коллекцией?
С наскоку у меня не получилось. Т.е. написать нужную коллекцию проблемы нет, а вот встроить ее в DataTable
пока не вышло...
Просто не хочется иметь каждый колумн в виде отдельного поля в коде таблицы.
первое зависит от количества элементов
Что то я не совсем понимаю
a[2] =0;
a[102]=0;
на сколько миллисекунд будет разница и почему? Или у тебя количество колонок гораздо больше?
Исходники теста можешь скинуть? Интересно понять результаты.
-----
Там не массив. Там нечто представляемое массивом. И вместо индексирования выполняется поиск,