Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Быстрая альтернатива Dictionary

21.11.2020, 06:57. Показов 6327. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ранее уже был разговор о том, что Dictionary не самый быстрый вариант работы со списками, отсюда вопрос - есть ли альтернативное решение с близким функционалом или всё сводится к массивам/спискам и собственной реализации необходимого?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2020, 06:57
Ответы с готовыми решениями:

Нужна альтернатива Dictionary (или как не засорять озу)
Доброго времени суток, уважаемые форумчане Я столкнулся с такой проблемой, что сильно засоряется память. И так с самого начала, почему я...

Двигать фигуру мышью, есть ли более быстрая альтернатива методу pictureBox.Refresh?
На форме есть pictureBox, в который вставлен рисунок (Image) из файла. С использованием метода MouseMove поверх рисунка с помощью курсора...

Проинициализировать значениями dictionary вложенный в dictionary
Народ, помогите, как проинициализировать значениями такую конструкцию: Dictionary <int,Dictionary<string, int>>

57
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2020, 20:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от belalugoci Посмотреть сообщение
потому что ключ может быть в 8 символов
Я не вижу это в вашем коде.
А проблема не в словаре, а в том каким образом вы извлекаете слова из текста.
В показанном вами коде слова состоят из одного символа.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
21.11.2020, 20:54  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
C#
1
2
3
if (!Freq.ContainsKey(source.Substring(i, 1))) // Создаётся строка из ОДНОГО символа
        Freq.Add(source.Substring(i, 1), 0); // Создаётся второй раз строка из этого же символа
    Freq[source.Substring(i, 1)]++; // Создаётся третий раз строка из этого же символа
Об этой части кода я уже написал, что она будет изменена, но это ведь никак не связано с Dictionary.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
21.11.2020, 20:57
Цитата Сообщение от belalugoci Посмотреть сообщение
чтобы это написать нужно было две страницы обсуждать всё кроме темы XD ребят, вы меня никогда не разочаровываете.
Так по теме вам ответили еще в первых сообщениях, даже ссылки дали на статьи, и даже в прямо здесь все про сложность словарей расписали. У вас еще остались вопросы? Тогда сформулируйте четко, что вам еще осталось непонятно по теме.
Но вы дальше начали жаловаться, что у вас подсчет слов тормозит, вот мы и начали это обсуждать.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2020, 20:59
Цитата Сообщение от belalugoci Посмотреть сообщение
вы предлагаете всегда и всюду писать код таким образом чтобы строки длиной в 1 символ преобразовывать в byte? а код в 2 и более символов обрабатывать как строку? это разумно?
Я не знаю!
Вы скрываете свою задачу, а я не телепат, чтобы догадаться о ней.
Способов оптимизации множество, а вы явно не понимаете где и в чём проблема.
Мы же не первый раз с вами поэтому общаемся.
Сколько было тем где вы так же неверно излагали причину проблем.
И требовалось несколько десятков постов просто для того, чтобы вы соизволили нормально изложить задачу.

То что вы пишите в этой теме, явно не является причиной проблемы.
Вам уже ответили это.
А что бы понять причину - надо видеть код и знать реализуемую вами задачи.
Я же не раз помогал вам в решении проблем.
Так уж обязательно каждую тему начинать с выяснения надо мне знать вашу задачу или нет?
Может хватит?
И просто выложите РЕАЛЬНЫЙ код и объясните какую задачу он решает.
Скорее всего вашу проблему удастся решить, но совсем не так как вы думаете.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
21.11.2020, 21:00  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я не вижу это в вашем коде.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В показанном вами коде слова состоят из одного символа.
а зачем вам видеть код? достаточно того что я об этом пишу регулярно. Ну если считаете что вас коробит наличие там единички, то пусть будет такой вариант:
C#
1
2
3
4
5
int x=8;
string s = source.Substring(i, x);
if (!Freq.ContainsKey(s))
        Freq.Add(s, 0);
    Freq[s]++;
только это никак не связано с Dictionary. Уже писал ранее, ну хоть убейте, но я не врубаюсь, зачем вам заниматься оптимизацией условного кода.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
А проблема не в словаре, а в том каким образом вы извлекаете слова из текста.
какая проблема?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2020, 21:10
Цитата Сообщение от belalugoci Посмотреть сообщение
Об этой части кода я уже написал, что она будет изменена, но это ведь никак не связано с Dictionary.
Но вы же не показываете часть связанную со словарём.
Как я могу сказать, что надо изменить в том, что вы скрываете?
Что показали - в том и получили решение.

Добавлено через 5 минут
Цитата Сообщение от belalugoci Посмотреть сообщение
только это никак не связано с Dictionary. Уже писал ранее, ну хоть убейте, но я не врубаюсь, зачем вам заниматься оптимизацией условного кода.
Мне не нужно занимать УСЛОВНЫМ КОДОМ!

И проблема не в словаре - вам уже написали за это несколько раз.
Словарь не может работать медленнее чтения из файла.
А раз у вас работает медленнее, то значит у вас в проблемы в коде не зависимо от использования словаря.


Хотите получить помощь - покажите РЕАЛЬНЫЙ код.
Не нужна вам помощь, а нужны пустые разговоры о том где какие коллекции в теории надо использовать - ради бога.
Получите ещё сотню бесполезных постов.

Вам решать , что вам нужно.

Добавлено через 2 минуты
Цитата Сообщение от belalugoci Посмотреть сообщение
Как я и писал выше, я не против того чтобы строку читать например в Uint64[], но тогда все операции над информацией придется писать самому. Это разумно, если код идёт в продакшн, а на этапе тестирования идей на первом месте простота написания кода.
Тогда вы чего хотите от нас?
Если вам понятен ваш код и вас он устраивает, в чём вопрос?
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
21.11.2020, 21:30  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Так по теме вам ответили еще в первых сообщениях, даже ссылки дали на статьи, и даже в прямо здесь все про сложность словарей расписали.
человеку спросившему о том что такое таблица умножения вы дали книжку по высшей математике.

Цитата Сообщение от Катафалк Посмотреть сообщение
У вас еще остались вопросы?
Сейчас нет.

Цитата Сообщение от Катафалк Посмотреть сообщение
Тогда сформулируйте четко, что вам еще осталось непонятно по теме.
Мне кажется я весьма понятно говорил о том, что озвученный ответ мне непонятен.

Цитата Сообщение от Катафалк Посмотреть сообщение
Но вы дальше начали жаловаться, что у вас подсчет слов тормозит, вот мы и начали это обсуждать.
Обычное враньё или невнимательность, я такого не говорил, нечто похожее сказал nicolas2008 "...что именно словарь тормозит работу?", причём до этих слов я нигде об этом не говорил вообще.
А обсуждаете вы мои ответу одному конкретному человеку, которые никак не связаны с темой.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы скрываете свою задачу, а я не телепат, чтобы догадаться о ней.
я не скрываю задачу, я не показываю код - это очевидно разные вещи.
задача же написана в начале темы.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Способов оптимизации множество, а вы явно не понимаете где и в чём проблема.
Я уже понял, что реализация Dictionary сильно зависима от контекста.
Проблема у меня со string и пока мы тут говорили, я уже уменьшил потребление памяти до 146 мб и увеличил производительность до 10 минут перейдя на использование StringBuilder и заменив, там где возможно, множественные обращения к строкам (типа озвученных ранее Substring).

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сколько было тем где вы так же неверно излагали причину проблем.
нисколько

Цитата Сообщение от Элд Хасп Посмотреть сообщение
И требовалось несколько десятков постов просто для того, чтобы вы соизволили нормально изложить задачу.
В других темах, точно так же как и в этой, я в полном объеме изложил задачу, ответ на которую уже дали, сначала заумно и непонятно, а потом проще и понятнее. А вы, как и в паре тем ранее - заняты решением проблем, которые придумали вы, а не я.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
То что вы пишите в этой теме, явно не является причиной проблемы.
Тема вообще не про проблему.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я же не раз помогал вам в решении проблем.
Я искренне и бесконечно вам благодарен, особенно за терпение, но вы легко улетаете с темы и фокусируетесь на несущественном или вами же придуманном.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так уж обязательно каждую тему начинать с выяснения надо мне знать вашу задачу или нет?
Может хватит?
Тема не связана с задачей, во всяком случае я такой связи не вижу. Хотя позднее уже сказали что выбор или не выбор Dictionary как раз контекстно зависим. Собственно тема на этом и закрывается.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
И просто выложите РЕАЛЬНЫЙ код и объясните какую задачу он решает.
я и код уже выложил и описал что там делается. Выкладывать всё приложение я не стану, оно не имеет отношение к обсуждаемой теме.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Скорее всего вашу проблему удастся решить, но совсем не так как вы думаете.
Не сомневаюсь что вы можете написать всё приложение иначе и лучше, но вопрос не в этом.

Добавлено через 10 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но вы же не показываете часть связанную со словарём.


Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что показали - в том и получили решение.
код, который я вам показал, был ответом на ваш вопрос, а не моим вопросом к вам.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Мне не нужно занимать УСЛОВНЫМ КОДОМ!
это был ответ на вопрос, я не вижу оснований публиковать всю программу ради этого.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
И проблема не в словаре - вам уже написали за это несколько раз.
Какая проблема-то?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Словарь не может работать медленнее чтения из файла.
А кто-то об этом говорит?
Ну и для справки - думаю скорость зависит не от факта файл/словарь, а от кода.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
А раз у вас работает медленнее
Где?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
то значит у вас в проблемы в коде
Уверен что проблемы в коде есть, только я нигде это не обсуждаю.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Хотите получить помощь - покажите РЕАЛЬНЫЙ код.
Реальный код чего? Объявления Dictionary и его заполнения? Я вам это показал.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не нужна вам помощь, а нужны пустые разговоры о том где какие коллекции в теории надо использовать - ради бога.
Получите ещё сотню бесполезных постов.
А почему это пустые разговоры? И почему кто-то должен говорить пустые слова на такие темы?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вам решать , что вам нужно.
Я хочу в океане знаний найти небольшой островок, спросив об этом у, как мне казалось, знающих людей.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Тогда вы чего хотите от нас?
Если вам понятен ваш код и вас он устраивает, в чём вопрос?
Если вам непонятна тема, то тогда - ни в чем.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
21.11.2020, 21:32
https://github.com/dotnet/core... arySlim.cs вот кстати экспериментальная альтернативная реализация словаря, тут даже метод GetOrAddValueRef есть...
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
21.11.2020, 21:33  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Потому что вы код актуальный не предоставляете
потому что он не нужен в этой теме

Цитата Сообщение от Someone007 Посмотреть сообщение
Поэтому и оптимизируем то, что есть...
Тема про оптимизацию?
0
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
21.11.2020, 21:35
Цитата Сообщение от belalugoci Посмотреть сообщение
какова цель тестирования?
Пытался найти оптимальный вариант решения вашей задачи, не сильно отходя от ваших структур данных.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
21.11.2020, 21:36
Цитата Сообщение от belalugoci Посмотреть сообщение
потому что он не нужен в этой теме
Нужен. Тем более что объяснить нормально вы не можете. Из кода вероятно было бы понятней что вообще нужно...
Цитата Сообщение от belalugoci Посмотреть сообщение
Тема про оптимизацию?
Да. Вы же сами написали что
Цитата Сообщение от belalugoci Посмотреть сообщение
Dictionary не самый быстрый вариант
Т.е. нужна оптимизация по скорости. Вот мы и ищем более быстрый вариант.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
21.11.2020, 21:41  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Да. Вы же сами написали что "Dictionary не самый быстрый вариант"
это слова сказанные вами же или вашими же коллегами ранее в других темах, я только обозначил вопрос, на него и нужно отвечать. Если вы не согласны с тем что Dictionary медленный, то вы могли бы это озвучить. Код в этой теме не нужен.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
21.11.2020, 21:43
Цитата Сообщение от belalugoci Посмотреть сообщение
Если вы не согласны с тем что Dictionary медленный
Думаю что конкретно в вашем случае проблема не в нем...
Цитата Сообщение от belalugoci Посмотреть сообщение
Код в этой теме не нужен.
А чтобы найти в чем конкретно проблема как раз код и нужен...
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
22.11.2020, 02:32  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Думаю что конкретно в вашем случае проблема не в нем...
нет проблемы

Цитата Сообщение от Someone007 Посмотреть сообщение
А чтобы найти в чем конкретно проблема как раз код и нужен...
когда наступил тот момент, что мы занялись поиском решения проблемы?
что в моей теме говорит о том что проблема вообще существует?
Вы тему читали и ответ найденный и отмеченный мной как решение?
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
22.11.2020, 04:10
belalugoci, а как же проблема с производительностью которую вы сами и поведали?
как вам больше нравится называть эту... ситуёвину?
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
22.11.2020, 05:48  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
а как же проблема с производительностью которую вы сами и поведали?
как вам больше нравится называть эту... ситуёвину?
я коснулся проблемы парсинга текста в контексте фразы, которую написал Элд Хасп и это было одно предложение в 17-м сообщении в ветке. Каким образом это вдруг могло стать темой?
За время существования темы я много чего уже переписал, скорость работы частей кода (3 сек), где используется Dictionary теряется на общем времени исполнения (6 часов), узким местом остаётся String и StringBulider на операциях Replace. Нужно будет попробовать конвертировать в byte[] и замены делать руками. Но это имеет смысл обсуждать в другой теме, которую создам позже, там будет кусок кода который работает сейчас, там и напишите про мой говнокод, как обычно, а в этой теме это абсолютно не имеет смысла.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
22.11.2020, 13:03
belalugoci, я кажется нашел проблему, поротестировал на 10 гигах текста, работает пару минут всего.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
22.11.2020, 13:12  [ТС]
Цитата Сообщение от КОП Посмотреть сообщение
я кажется нашел проблему, поротестировал на 10 гигах текста, работает пару минут всего.
Я тут тему отдельную создал, можете там написать ваши мысли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2020, 13:12

Более быстрая альтернатива циклической вставке в таблицу
Задача звучит так: При помощи простого SELECT вставить миллион записей в таблицу базы в цикле. Проанализировать, насколько это быстро ...

Улучшенная альтернатива HDD или ухудшенная альтернатива SSD
Как я заметил, в ПК для офисных задач самое узкое место - это устройство хранения данных. Поэтому SSDшники повышают удобство работы за...

Как достать dictionary из dictionary?
Подскажите пожалуйста как получить значение dictionary который находится внутри другого dictionary? Я не понимаю как обратиться к нему. ...

Создать запрос Dictionary в Dictionary
Только учусь программировать и поэтому не очень разобрался с LINQ. У меня есть Dictionary<string, Dictionary<string,...

Отбор из Dictionary вложенного в Dictionary
Здравствуйте, есть такой код: private Dictionary<string, Dictionary<int, string>> vt = new Dictionary<string, Dictionary<int,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
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
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru