|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
Быстрая альтернатива Dictionary21.11.2020, 06:57. Показов 6339. Ответов 57
Метки нет (Все метки)
Ранее уже был разговор о том, что Dictionary не самый быстрый вариант работы со списками, отсюда вопрос - есть ли альтернативное решение с близким функционалом или всё сводится к массивам/спискам и собственной реализации необходимого?
0
|
|
| 21.11.2020, 06:57 | |
|
Ответы с готовыми решениями:
57
Нужна альтернатива Dictionary (или как не засорять озу) Двигать фигуру мышью, есть ли более быстрая альтернатива методу pictureBox.Refresh?
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||||||
| 21.11.2020, 15:17 [ТС] | |||||||||||||||
|
ну а дебаггер тут ровно при том, что при старте программы VS меняется визуально, показывает статистику и т.п. и вот пока появится вся эта информация файл успевает прочитаться, так что дискомфорта это не вызывает.
0
|
|||||||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||||||
| 21.11.2020, 15:46 | ||||||
|
Зачем 2 раза делать
1
|
||||||
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|||||
| 21.11.2020, 15:57 | |||||
|
опишите задачу например "посчитать частоту слов в файлах. 10 гигов такого-то текста. ..." потом запостите код вашего решения, а не "Упрощенный вариант." вы же хотите чтобы ваша программа быстрее работала, а не студия с ее дебаггером, правильно?
1
|
|||||
|
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
|
|
| 21.11.2020, 16:09 | |
|
а еще вместо ContainsKey/Add можно использовать индексатор - уже в два раза меньше операций поиска по словарю.
Freq[str]++ Добавлено через 5 минут Если текст всегда в однобитной кодировке то нет смысла читать файл как текст - это медленнее и потребляет 2х памяти тк символы в строке хранятся в unicode Добавлено через 1 минуту Упрощенный вариант - не вариант. Каждый нюанс имеет значение
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||
| 21.11.2020, 16:23 | ||
|
0
|
||
|
Модератор
|
||
| 21.11.2020, 17:11 | ||
|
Он делается совершенно по иному намного более оптимально. Словарь как минимум нужно изменить на Dictionary<char, int>.Меня интересует как вы выделяете слова из текста, по какому принципу. Добавлено через 1 минуту КАЖДЫЙ символ преобразуете в строку, которую потом отправляете в мусор.... Ужас...! Покажите код для слов.
0
|
||
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
||
| 21.11.2020, 17:18 | ||
![]() Добавлено через 2 минуты belalugoci, если хотите конструктивной помощи, покажите ВЕСЬ код. Без всяких упрощений.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||||||
| 21.11.2020, 19:53 [ТС] | |||||||||||||||
|
мне жаль, но весь код показать не могу.
собственно я и не люблю публиковать код, так как вместо обсуждения проблемы, мы начинаем обсуждать код, который к теме имеет слабое отношение. Поиск может происходить по строкам до 8 байт, поэтому там никакой char не получится использовать. source.Substring(i, 1) Добавлено через 4 минуты
0
|
|||||||||||||||
|
|
|
| 21.11.2020, 20:03 | |
Сообщение было отмечено belalugoci как решение
Решение
Ну тогда ответ на изначальный вопрос в теме прост.
Да, если вас не устраивает стандартный функционал, то все сводиться к самостоятельной реализации необходимого. Но что-то мне подсказывает, проблема у вас не в dictionary. А в том, как именно вы его используете. Но показывать это не хотите. Тут тупик.
1
|
|
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
|||
| 21.11.2020, 20:08 | |||
|
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||
| 21.11.2020, 20:27 [ТС] | |||||||||||
source - весь текстsource.Substring(i, 1) - кусок текста, разбитый на словоFreq[source.Substring(i, 1)]++ - подсчёт в Dictionary.Но хочу сказать еще раз - тема о Dictionary и том - можно ли и нужно ли на что-то его менять ВООБЩЕ, а не в контексте моего приложения.
0
|
|||||||||||
|
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
|
||||||
| 21.11.2020, 20:34 | ||||||
|
Тестировал с файлом 1.6 МБ
0
|
||||||
|
Модератор
|
||||||||
| 21.11.2020, 20:38 | ||||||||
|
Вы ранее писали, что анализируете слова в тексте файла. Но посмотрите, что вы делаете в коде. Вы получаете поток байтов из ASCII файла. Каждый байт преобразуется в символ (char) - это не менее 2 байт. Из полученной последовательности символов создаёте единую строку (string). Потом во в цикле проходите по каждому символу строки - ведь source.Substring(i, 1) извлекает только один символ.Каждый символ минимум преобразовываете в две строки, а иногда в три строки. Которые, после цикла сразу отправляются в мусор. В итоге на 1ГБ исходного потока файла у вас генерируется 5-8 ГБ мусора. Вам нужно собрать информацию о БАЙТАХ, но вы зачем-то их ТРИ-ЧЕТЫРЕ раза конвертируете даже не в Char, а в String. Конечно будет обвал производительности. Байт имеет всего 256 состояний. Зачем вам словарь? Собирайте всё в обычный массив, в котором индекс означает ASCII код. Вот простой код, так сказать "в лоб" . Но и то он будет многократно быстрее вашего.
1
|
||||||||
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
||
| 21.11.2020, 20:41 | ||
|
1
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||
| 21.11.2020, 20:45 [ТС] | |||||
|
У нас уже был в других темах подобный разговор и сейчас он 1 в 1 повторяется - вы игнорируете тему и заняты оптимизацией ПРИМЕРА кода, который к задаче имеет далёкое отношение.
0
|
|||||
|
Модератор
|
||
| 21.11.2020, 20:46 | ||
|
Как можно его оптимизировать не видя его? Для нормальной быстрой реализации, вам надо работать с исходной информацией в её исходном виде - поток байтов. И чтобы понять как вы выделяете слова из текста, надо видеть ваш код. В представленном вами коде я объяснил причины провала производительности - генерацию огромного количества мусорных строк. Но если это не ваш реальный код, то исправить код который я не вижу - я не могу.
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||
| 21.11.2020, 20:48 | ||
|
0
|
||
|
Модератор
|
|||||||
| 21.11.2020, 20:50 | |||||||
0
|
|||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||
| 21.11.2020, 20:52 [ТС] | ||||
|
Как я и писал выше, я не против того чтобы строку читать например в Uint64[], но тогда все операции над информацией придется писать самому. Это разумно, если код идёт в продакшн, а на этапе тестирования идей на первом месте простота написания кода.
0
|
||||
| 21.11.2020, 20:52 | |
|
Более быстрая альтернатива циклической вставке в таблицу Улучшенная альтернатива HDD или ухудшенная альтернатива SSD Как достать dictionary из dictionary?
Отбор из Dictionary вложенного в Dictionary Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|