|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
||||||
Оптимизация кода по получению информации об играх из файла08.04.2023, 00:44. Показов 8157. Ответов 46
Метки нет (Все метки)
Всех приветствую. Мне нужно получить из lua файлов имена и другую информацию об играх. В принципе мой код работает,но если в папке 70-80 и более игр,ui зависает где-то на пару секунд. Я не представляю,что будет,если в папке будет 300 игр. Я понимаю,что возможно мне надо делать это в отдельном потоке,но я не умею работать с потоками в mfc,да и,на мой взгляд,это не нужно,главное оптимизировать код и тогда,на мой взгляд,тормоза уменьшатся. Суть в том,что в каждой папке с игрой мы парсим первые 15 строк из некоторых lua файлов (main.lua и main3.lua) для получения нужной информации (подпапки в играх нас не интересуют). Затем мы добавляем недостающие игры,т.е те игры,которые мы установили вручную,в CListBox,но этот код я не буду выкладывать,т.к,на мой взгляд,он не вызывает тормоза. Вообще,как мне кажется,наибольшие тормоза из этого вызывают регулярки. Если в них основная проблема,подскажите пожалуйста,как обойтись без них,или какую более быструю библиотеку использовать для регулярок. approveInfo - мап типа string,std:
air<string,int> (тип я пишу примерно). Вот фрагмент кода класса,в котором показан парсинг строк из файлов. Заранее всех благодарю за помощь по оптимизации этого счастья.
0
|
||||||
| 08.04.2023, 00:44 | |
|
Ответы с готовыми решениями:
46
Оптимизация запроса по получению периода если дана дата Оптимизация кода скрипта при большом объеме информации Оптимизация программного кода (считывание информации с Edita в массивы ) |
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
||||||
| 15.04.2023, 15:14 [ТС] | ||||||
|
Огромное Вам спасибо за помощь. Скорее всего я не буду вообще пользоваться регулярками,раз без них всё работает гораздо быстрее. Правда я не понял,что за конструкция:
0
|
||||||
|
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
|
||||||||
| 15.04.2023, 15:35 | ||||||||
|
Идет разделение по символу ':' , а после может остаться пробел
в вашем коде есть подобное
0
|
||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|
| 15.04.2023, 20:43 [ТС] | |
|
Я имел ввиду почему мы в теле метода в этой конструкции открываем новую фигурную скобку. Я понимаю,если бы там был if,но тут его вроде нет.
0
|
|
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
|
| 15.04.2023, 20:47 | |
|
0
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|
| 19.04.2023, 20:03 [ТС] | |
|
Ещё возник момент,над которым надо подумать,что после комментария,т.е строки "--" без кавычек может быть н пробелов. Также н пробелов может быть в начале строки. Тут,видимо,надо делать итерацию по символам в CString,т.к от регулярок я решил полностью отказаться.
0
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|
| 25.04.2023, 16:39 [ТС] | |
|
В общем после моей оптимизации код стал быстрее где-то в раз 10-15. Если у кого есть идеи,как его ещё больше оптимизировать,пишите. Мне лично не нравится,что приходится прыгать с CString к wstring и обратно,но unordered_map не поддерживает CString. Также почему-то не удаётся удалить $ в конце строки. Если кто-то сообразит почему,буду благодарен,а то очень обидно,что почти всё работает,но есть одна засада.
0
|
|
|
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
|
|||
| 25.04.2023, 17:19 | |||
|
0
|
|||
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
|||
| 25.04.2023, 17:30 | |||
|
0
|
|||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
||||||
| 25.04.2023, 20:51 [ТС] | ||||||
|
Поддерживает-то поддерживает,но как написано в интернете там надо реализовать свою хеш функцию и другие вещи. Почему-то код не вставился,пробуем дубль 2. Надеюсь теперь мне смогут помочь. ������
Надеюсь теперь мне смогут помочь,т.к код вставился. ������ Вопросы выше ещё актуальны. unordered_map поддерживает CString,но там есть несколько решений,чтобы эту поддержку добавить. Какое решение,Алексей,на Ваш взгляд лучше и куда лучше вставить этот код? Я,если честно,ранее с шаблонами в c++ не разу не работал,поэтому в решениях на stackoverflow мне многое непонятно,но Ваше решение для unordered_map я,наверное,использую. От CString я не смогу отказаться,т.к xml парсер и списки используют CString. К тому же там есть плюшки,которых нет в std::wstring. Единственное,я попытаюсь добавить поддержку CString для hashmap,главное найти хорошее решение для c++ 17 и выше. Добавлено через 2 часа 19 минут Так,с первым вопросом,вроде,разобрался. Нужно от длинны отнять 1 и отнять (valPos+1). Теперь хотелось бы получить ответ на остальные вопросы. Если Вы считаете,что мой код максимально оптимизирован,напишите пожалуйста об этом. Заранее всех благодарю за помощь.
0
|
||||||
|
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
|
||||||
| 26.04.2023, 00:28 | ||||||
|
В функции parseGameInfo лишние телодвижения, можно проще.
Искать только три символа: первый '$', ':' и последний '$'. Искать первый '$'. Если найден, то с позиции '$' искать ':' .Если успешно, следом за ':' искать последний '$' . Если все позиции получены, вырезать ключ и значение, у значения удалить пробелы слева, вставить ключ-значение в словарь. Псевдокод
Строку где ключ вырезают, на условие вниз нужно было перенести
0
|
||||||
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
|||||||
| 26.04.2023, 09:03 | |||||||
аа, ну, если проект юникодный, то std::string_view надо заменить на std::wstring_view
0
|
|||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|
| 26.04.2023, 18:44 [ТС] | |
|
Дело в том,что мы ищем ключ только если в строке есть комментарии и перед и после них может быть пробел или символ \t.4
Добавлено через 13 минут Я вот тут подумываю,а не перенести ли мне всё с CString на std::wstring. Темболее,что,к примеру,mfcшная функция работы с item вроде позволяет использовать cstring. Только чтение файла и парсинг xml работает с CString. Я готов помучатся и переписать всё на wstring,т.к даже те функции,которые возвращают CString,не проблема,т.к мы можем просто вызывать GetString() и c_str соответственно. Но я хочу быть уверен,что после этого скорость работы моих функций и методов увеличится,а не наоборот - уменьшится. п.с Если Вам нетрудно,посмотрите пожалуйста мои изменения. Вдруг у Вас будут идеи,как ещё больше увеличить скорость работы программы,т.к Вы,как я понимаю,работаете с mfc. Конечно,текущая скорость меня почти устраивает,но может можно её ещё больше увеличить?
0
|
|
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
|||
| 26.04.2023, 19:39 | |||
|
0
|
|||
|
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
|
|||
| 26.04.2023, 20:04 | |||
|
вы читаете не более 15 строк Добавлено через 11 минут Если считаете, что такая проверка необходима, тогда конечно лучше её сделать.
0
|
|||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|
| 26.04.2023, 23:49 [ТС] | |
|
Ну раз скорость не увеличится,тогда смысла парится,наверное,нет. Алексей,я не прошу Вас или кого-либо смотреть весь проект,т.к он большой (хотя в глубине души мне очень хотелось бы это). Я имел ввиду изменённый код,который я прислал сюда,не более того. Кстати что делает метод GetString у CString и c_str() у wstring? Я имею ввиду не влияют ли они на скорость работы программы?
0
|
|
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
|||||
| 27.04.2023, 09:11 | |||||
|
2) Само собой, оптимизировать намного удобнее, если не будет постоянных конвертаций из одного класса в другой 3) для оптимизации смотреть на кусок кода обычно нет смысла (кроме очевидных косяков), нужно проект ковырять и замерять Но, вместе с тем, у CString используется COW и динамическая память, а фича std::wstring - SSO, то есть короткие строки могут лежать на стеке, а не в динамической памяти поэтому, вот так напрямую сравнить сложно. Всё зависит от характера использования
0
|
|||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|||||
| 27.04.2023, 15:28 [ТС] | |||||
0
|
|||||
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
||
| 27.04.2023, 15:37 | ||
std::size(buff)а сейчас передаётся в два раза бОльший размер, что, возможно, приводит к UB из-за порчи стека
0
|
||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 371
|
|
| 27.04.2023, 16:37 [ТС] | |
|
Огромное Вам спасибо. Я этого и не знал и проект делался до меня. А в каких случаях нужно использовать sizeof(buff)),а в каких - std::size(buff). В других частях проекта я это тоже поправлю. Что значит порча стека? Просто я слышал про утечки памяти,а про это слышу в первый раз. Если Вы ещё где-то найдёте проблемы,или у Вас будет идея,как увеличить скорость работы метода по добавлению игр,сообщите мне пожалуйста.
0
|
|
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,424
|
|||
| 27.04.2023, 16:45 | |||
|
std::size(buff) - вернёт размер автоматического массива в ЭЛЕМЕНТАХ (что и требуется для функции GetModuleFileName) Добавлено через 4 минуты Таким образом будет меньше реаллокаций. Если это место интенсивно используется, это может увеличить производительность. Но если используется редко, то нет смысла в этом телодвижении
0
|
|||
| 27.04.2023, 16:45 | |
|
Литература по получению MD5 файла в C++ с CryptoApi Оптимизация кода пакетного файла для создания бэкапов Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода Оптимизация кода. Замер времени выполнения части кода. Алгоритм передачи информации в играх Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|