4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
||||||
1 | ||||||
.NET 4.x Как оптимизировать код, где используется много методов .Contains?22.04.2013, 08:06. Показов 2649. Ответов 30
Метки нет (Все метки)
Здравствуйте! Есть задача поиска всех url'ов на каком то сайте и найти в них битые/небитые. Задачу решил с использованием Selenium WebDriver. В его помощью я легко получаю все нужные мне ссылки. Но вот только после того, как страница сайта была загружена и из её кода были выдраны url'ы, мне нужно проверить, не обрабатывал ли я уже такую url'ку, нет ли её уже в каком нибудь списке. Для этого использую метод .Contains. Вот только использую аж 5 штук подряд) И получается ситуация, что страница уже загружена, а из-за моих проверок прога висит. Можно ли как то оптимизировать мой код:
0
|
22.04.2013, 08:06 | |
Ответы с готовыми решениями:
30
Код потребляет очень много памяти. Подскажите как оптимизировать? Оптимизировать код парсинга страниц. Используется SimpleHtmlDom Где научиться оптимизировать код? Как оптимизировать на чтение, если много оперативки? |
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
22.04.2013, 11:52 [ТС] | 3 |
А чем мне это поможет? Насколько я знаю Dictionary - это штука, чтобы заменить значения переменных какими то человекопонятными словами. Не?
0
|
Master of Orion
|
|
22.04.2013, 14:13 | 5 |
Vlad10, замените просто Arraylist на HashSet<string> Все остальное оставьте как есть.
Добавлено через 1 минуту И на будущее: откажитесь от ВСЕХ случаев использования ArrayList, как глючного тормознутого... Фигни... Добавлено через 1 минуту dondublon, словарь тут не при чем, достаточно сета
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
||||||
22.04.2013, 15:03 [ТС] | 8 | |||||
И это действительно так, время простоя на самой заполненной ссылками странице не больше секунды. Спасибо! Меня в принципе устраивает. Другое дело, в цикле есть кусок кода:
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
22.04.2013, 15:12 [ТС] | 10 |
Да, так сначала и было. Я сначала делал ссылки, потом проверял код. Потом подумал, что быстрее будет сразу ссылку проверять. Думаете, если я верну обратно, то будет быстрее?
0
|
Master of Orion
|
|
22.04.2013, 16:10 | 11 |
Vlad10, если будет форич, можно будет запустить все обработки параллельно, тогда время работы вряд ли будет дольше времени загрузки самой долгой страницы. Переделайте в foreach, я вам покажу
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
||||||
22.04.2013, 17:42 [ТС] | 12 | |||||
Вот переделанный код
P/S. У HashSet<string> нету метода .Sort(). Обидно =((((((((
0
|
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
|
22.04.2013, 17:51 | 13 |
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
22.04.2013, 17:54 [ТС] | 14 |
0
|
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
|
22.04.2013, 18:06 | 15 |
1
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
22.04.2013, 18:08 [ТС] | 16 |
0
|
Master of Orion
|
||||||
22.04.2013, 19:28 | 17 | |||||
Vlad10, Есть понятие SortedSet == HashSet + sort. Только не вижу смысла в сортировке в данной задаче. А приведение к листу теряет всю эффективность сетов.
я отрефакторил, как мог, ну и добавил параллельность:
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
||||||
22.04.2013, 19:54 [ТС] | 18 | |||||
Большое спасибо! Сейчас буду пробовать. Сортировка в данной задаче нужна, т.к. сбор ссылок - только самое начало огроменной проги. Разработчикам будет удобнее отсортированное читать.
Пока есть вопросы: 1. Почему во всех переменных написан var? Я знаю, что var сам определяет тип, так типа надёжнее? 2.
0
|
Master of Orion
|
|||||||||||
22.04.2013, 19:59 | 19 | ||||||||||
Vlad10,
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
22.04.2013, 20:06 [ТС] | 20 |
Сделал, теперь коды ответа вообще супер быстро получаю. А во сколько потоков это делается?
И ещё, я сейчас поставил получение кодов в бесконечный цикл, чтобы посмотреть не банит ли меня сервер. Так вот, после 2000 раз у меня уже 2 раз вылезает AggregateException. Если просто нажать на продолжить, то всё продолжается. Что делать? Как это обработать?
0
|
22.04.2013, 20:06 | |
22.04.2013, 20:06 | |
Помогаю со студенческими работами здесь
20
Много методов или много классов. Что лучше? Конкатенация потребляет много памяти, как можно оптимизировать? Где и как используется оператор elseif? Используется много памяти Фильмы о танцах (где много, ну очень много танцев) Для чего используется using внутри методов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |