Скорость поисков строки/столбец DataSet?

Из вашего описания текущей реализации вы, похоже, используете Thread.Sleep для ожидания в течение 2 часов, верно? Если это так, ваша программа действительно плохо закодирована.

Не спать. Поскольку в течение 2 часов ваша программа не может ничего сделать, она не может проверить, обновлен ли список заданий.

Используйте таймеры. В частности, используйте класс System.Timers.Timer.

Используйте таймер для проверки списка заданий, проверяя его раз в секунду, и все в порядке. Используйте больший интервал, например 2 или 5 секунд, если вы обнаружите проблему с производительностью в таймере.

Для работы, которая должна быть выполнена через 2 часа, просто установите таймер, который срабатывает через 2 часа, забудьте о нем и удалите работу из списка. Если вы найдете другую работу, которая должна быть выполнена через 3 часа, снова установите другой таймер.

6
задан Dan Herbert 28 September 2008 в 00:55
поделиться

4 ответа

Через Отражатель шаги для DataRow["ColumnName"]:

  1. Получите DataColumn от ColumnName. Использует DataColumnCollection["ColumnName"] строки. Внутренне, DataColumnCollection хранит свой DataColumns в Hastable. O (1)
  2. Получите индекс строки DataRow. Индекс хранится во внутреннем участнике. O (1)
  3. Получите значение DataColumn при индексном использовании DataColumn [индекс]. DataColumn хранит свои данные в Системе. Данные. Распространенный. DataStorage (внутренний, абстрактный) участник:

    возвратите dataColumnInstance. _ устройство хранения данных. Доберитесь (recordIndex);

    Демонстрационной конкретной реализацией является Система. Данные. Распространенный. StringStorage (внутренний, изолированный). StringStorage (и другой конкретный DataStorages, который я проверил) хранят свои значения в массиве. Доберитесь (recordIndex) просто захватывает объект в массиве значения в recordIndex. O (1)

Таким образом, в целом Вы - O (1), но это не означает хеширование, и функция, звонящая во время операции, бесплатно. Это просто означает, что это не стоит больше как количество увеличений DataRows или DataColumns.

Интересный, что DataStorage использует массив для значений. Не может предположить, что это легко восстановить, когда Вы добавляете или удаляете строки.

2
ответ дан 17 December 2019 в 04:54
поделиться

На самом деле желательно использовать целое число при ссылке на столбец, который может улучшиться много с точки зрения производительности. Для хранения вещей управляемыми Вы могли объявить постоянное целое число. Таким образом вместо того, что Вы сделали, Вы могли сделать

const int SomeTable_SomeColumn = 0;

DataTable dt = new DataTable();
if(dt.Columns.Contains(SomeTable_SomeColumn))
{
    object o = dt.Rows[0][SomeTable_SomeColumn];
}
3
ответ дан 17 December 2019 в 04:54
поделиться

Я предполагаю, что любые поиски были бы O (n), поскольку я не думаю, что они использовали бы любой тип хеш-таблицы, но будут на самом деле использовать больше массива для нахождения строк и столбцов.

0
ответ дан 17 December 2019 в 04:54
поделиться

На самом деле я полагаю, что названия столбцов хранятся в Хеш-таблице. Должен быть O (1) или постоянный поиск для чувствительных к регистру поисков. Если бы это должно было просмотреть каждого, то, конечно, это был бы O (n).

0
ответ дан 17 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: