Эффективность запросов .NET DataSet - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть XML, который я анализирую и пытаюсь извлечь некоторые данные. Допустим, результирующий набор данных после анализа входного XML-файла имеет (2) таблицы.

Таблица № 1 содержит IP-адрес и первичный ключ. Таблица № 2 содержит номера портов и соответствующий первичный ключ.

Я хочу просмотреть обе таблицы и создать объект, который содержит IP-адрес и соответствующий порт. По сути, объединение данных из двух таблиц с одним и тем же первичным ключом.

Сейчас я использую цикл foreach, вложенный в другой цикл foreach. Внешний проходит через каждый IP-адрес, а внутренний проходит через каждый порт и соответствует одному и тому же первичному ключу.

Результат работает, но это O (n ^ 2). Есть ли более быстрый способ сделать это?

Кстати, я использую C #

1 Ответ

1 голос
/ 17 ноября 2009

Сначала убедитесь, что вы установили свойство PrimaryKey каждого DataTable для соответствующего столбца. Затем, вместо внутреннего цикла, используйте table.Rows.Find(primaryKeyValue), чтобы вытащить соответствующий ряд из второго DataTable. И в средах NT, и в Compact это создаст и будет использовать красно-чёрное дерево индекс для внутреннего использования, что даст вам время O (n log n).

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

...