Новое: L_Множественное буферное вывод для файлов (класс) >>> Добавить псевдоним файла (псевдоним файла, фактический абсолютный путь)
Если первый параметр методов записать текст() записать набор байтов() записать указатель данных() соответствует установленному псевдониму, фактический путь записи файла будет заменен на абсолютный путь, указанный в этом методе
Новое: [Множественный потокобезопасный вызов компонента окна] Супер-список_Получить количество колонок(), Супер-список_Получить заголовок колонки()
Улучшение: L_Файл_Чтение файла() Добавлен новый параметр: возвращать текстовый тип, по умолчанию ложь=возвращать набор байтов, истина=возвращать текстовый тип
Улучшение: L_Множественное буферное вывод для файлов (класс) Внутренний замок заменен, в теории будет лучше работать в многопоточном режиме (теоретическое улучшение не слишком велико)
Улучшение: L_Текст_Получить пустой текст(), L_Набор байтов_Получить пустой набор байтов() Логика возврата пустых данных изменена, теперь возвращается указатель данных, а не адрес 0, соответствующий поведению основной библиотеки
Исправление: L_Время_Преобразование в GMT формат 1() Проблема с несоответствием метки [день недели] ожиданияОбновление сторонних библиотек или модулей, связанных с функциями/программами:
Библиотека для мгновенного пакетирования и распаковки переменных обновлена до версии v2.5:
1. Исправлено падение или генерация аномальных данных при пакетировании пустого набора байтов или пустого текстового типа.
2. Исправлено падение при распаковке из-за передачи аномального набора байтов, добавлено дополнительное обнаружение.
Curl: Обновлено до версии 8.12.1#1
Добавлены: L_текст_взять_повторяющийся_текст(), L_текст_удалить_все_пробелы(), L_байты_взять_повторяющийся_байты() для замены функций ядра, обеспечивающих более высокую производительность.
Добавлено: L_новое_время_текстовый_формат_в_миллисекунды() преобразует строку с произвольным форматом времени в UTC-метку времени (в миллисекундах). Это полезно для любых сложных форматов времени, которые могут быть трудно распознаны другими методами.
Пример: 28 Nov 2044 03:13:01 GMT
Добавлено: L_каталог_очистить() очищает все файлы в указанном каталоге, включая все подкаталоги, но не удаляет каталоги.
Добавлено: L_виртуальная_таблица(класс) >>> установить_фокус() устанавливает фокус на текущий компонент.
Добавлено: L_потоковый_объект(класс) потокобезопасный; подходит для создания потока для циклического выполнения кода, а также для управления завершением потока, что упрощает процесс.
Добавлены: L_URL_*() связанные подпрограммы для предоставления мощных и высокопроизводительных операций чтения и записи URL.
Добавлено: L_Curl_http2winhttp(класс) >>> установить_обработчик_данных() устанавливает обратный вызов для получения данных после отправки, может быть вызвано несколько раз.
Добавлено: L_Curl_http2winhttp(класс) >>> установить_обработчик_прогресса() устанавливает обратный вызов для отслеживания прогресса загрузки и отправки после отправки, может быть вызвано несколько раз.Добавлено: L_WSS_очистить_кэш_соединений() очищает внутренние данные соединений, такие как заголовки ответа, чтобы освободить больше памяти. Обычно следует использовать после завершения соединения.
Добавлено: L_потоковый_пул(класс) >>> задержка() автоматически отвечает на L_остановить_все_задачи() и L_восстановить_все_задачи().
Улучшено: L_winhttp(класс) код для обработки URL был заменен на L_URL_*() связанные подпрограммы, что повысило производительность. Теперь поведение обработки URL-перенаправлений почти такое же, как у curl.
Улучшено: L_очередь(класс), L_потоковый_пул(класс) внутренняя система приоритетов захвата блокировок потоков была улучшена, что повысило производительность многопоточного режима (уменьшило конфликты атомарных блокировок).
Улучшено: L_кодировка_Ansi_в_utf8() добавлены комментарии: если используется для отправки данных на веб-страницу, необходимо установить [удалить_конечные_нули] в true, иначе некоторые HTTP-серверы могут выдавать ошибки.
Улучшено: L_Winhttp(класс) >>> отправить() теперь автоматически кодирует в UTF8.
Улучшено: L_задержка() добавлен параметр [повысить_точность], по умолчанию false. Если параметр установлен в true, то в случае поддержки системы, точность задержки будет повышена.Улучшено: L_текст_взять_определенный_текст(), L_текст_взять_определенный_текст2() теперь поддерживают разделение на полугоризонтальные цифры, полугоризонтальные буквы, полугоризонтальные символы, полугоризонтальные буквы, полугоризонтальные символы и т. д., версия на чистом ассемблере. Оптимизация: L_текст_является_числом(), L_текст_является_строчной_буквой(), L_текст_является_прописной_буквой(), L_текст_является_буквой() преобразованы в чистый ассемблерный код. Оптимизация: L_WSS_соединение() добавлен новый параметр: автоматическое добавление заголовка Host; по умолчанию установлено значение "true", включено по умолчанию; при включении, если в [дополнительных заголовках] отсутствует Host, он будет автоматически добавлен. Оптимизация: L_NodeV8_добавить_библиотеку_*() в комментариях добавлены замечания по использованию функций. Оптимизация: L_множественное_буферное_вывод_файла(класс) теперь поддерживает режим одновременного вывода файлов в нескольких процессах; добавлены пояснения к параметрам в методе инициализации(). Оптимизация: L_lz4(класс) обновлено до последней версии библиотеки lz4, перепаковано для обеспечения стабильности и надежности, обновлены комментарии к подпрограммам.Оптимизация: внутри модуля hpsocket теперь автоматически выбирает подходящую версию для инициализации (например, обычно инициализируется мини-версия, при использовании функции wss автоматически инициализируется полная версия).
Оптимизация: в описании обратного вызова для некоторых функций внутри модуля заменено "hwnd" на "указатель на окно" для избежания путаницы у пользователей.
Исправление: L_битовая_операция_инверс_*() исправлено наличие лишнего параметра в подпрограммах.
Исправление: L_директория_копирование(), L_директория_удаление(), L_директория_очистка() исправлен баг, связанный с бесконечным циклом при встрече с пустой директорией.
Обновление сторонних библиотек или функций, включенных в модуль:
RocksDB: обновлено до версии 9.10.0#1
OpenCV: обновлено до версии 4.10.0#3
Curl: обновлено до версии 8.11.1_3
NCNN: обновлено до версии 20241226
MMKV: обновлено до версии 2.0.2
Coost: обновлено до версии 20240904
mimalloc: обновлено до версии v2.1.9_20250111
lz4: обновлено до версии 1.10.0
Другие обновления зависимых библиотек опущены. . .
Новое: L_NodeV8_получить_рабочий_каталог() возвращает путь к L_NodeV8.exe
Новое: L_NodeV8_перезапустить_процесс() принудительно перезапускает процесс
Новое: L_копировать_каталог() копирует все файлы из одного каталога, включая подкаталоги, в другой каталог
Новое: L_получить_имя_каталога() например: C:\001\002\ возвращает 002
Новое: Инициализация_компонентов_окна_() добавлен параметр: использование событий обработки; при первом вызове этой команды, этот параметр контролирует использование событий обработки при работе с компонентами окна, что предотвращает блокировку очереди сообщений окна множеством параллельных потоков, что делает невозможным управление окном с помощью клавиатуры и мыши
Новое: L_тип_текста_W_*() связанные подпрограммы для обработки символов Unicode
Новое: L_файлы_*() подпрограммы добавлены версии Unicode
Новое: L_перечисление_файлов_W(класс) версия Unicode для перечисления файлов
Новое: L_операция_бит_свойства_удалить() чистая версия ассемблера; удаление определенного битового свойства из свойств
Новое: L_перезапуск_программы()
Новое: L_кодирование_Base32_кодирование2(), L_кодирование_Base32_декодирование2(), L_кодирование_длина_вычисления_кодирования_Base32(), L_кодирование_длина_вычисления_декодирования_Base32() чистая версия ассемблераНовое: L_кодирование_Base32_кодирование(), L_кодирование_Base32_декодирование(), L_кодирование_получить_указатель_таблицы_кодирования_Base32() функции, обновленные на основе предыдущей строки
Новое: L_кодирование_Base58_кодирование2(), L_кодирование_Base58_декодирование2(), L_кодирование_длина_вычисления_кодирования_Base58(), L_кодирование_длина_вычисления_декодирования_Base58() чистая версия ассемблера
Новое: L_кодирование_Base58_кодирование(), L_кодирование_Base58_декодирование() функции, обновленные на основе предыдущей строки
Новое: L_получить_левую_часть_текста(), L_получить_правую_часть_текста() имеют более высокую производительность по сравнению с встроенными функциями Easy Language, все связанные коды внутри модуля заменены этими подпрограммами
Улучшение: L_NodeV8_инициализация() теперь инициализация использует локальную среду выполнения, что предотвращает проблемы совместимости
Улучшение: L_получить_восточно_азиатское_время() теперь получает только заголовок HTTP, а не полный HTML-контент
Улучшение: исправлены комментарии L_удалить_конечный_слеш_каталога()
Улучшение: yyjson теперь автоматически связан с глобальным буфером памяти модуля, что улучшает производительностьУлучшение: L_получить_исключение(класс) теперь может внутренне определить, является ли проблема из-за необработанных автоматически кодов при компиляции или из-за потоков, созданных сторонними модулями, DLL или библиотеками поддержки, которые не позволяют отслеживать выполнение кода.
Улучшение: L_получить_исключение(класс) добавлен адрес входной функции потока, что позволяет легче определить, какой DLL/библиотека создала текущий разбившийся поток; добавлен вывод реальных адресов вызова стека, что упрощает отслеживание информации с помощью декомпиляции.
Оптимизация: WebSocket-клиент. Количество используемых дескрипторов и потребление памяти для каждого соединения сокращены.
Оптимизация: Подпрограммы L_файл_чтение_*(), L_файл_запись_*() теперь проверяют переданные дескрипторы файлов, чтобы избежать передачи недопустимых значений, таких как 0 или -1, что может привести к аварийному завершению программы.
Оптимизация: В функциях L_окно_получить_заголовок() и L_окно_получить_заголовокW() устарели параметры времени ожидания; теперь используется более эффективный метод получения данных, поддерживающий различные ситуации зависания окон.
Оптимизация: В функции L_байтовая_последовательность_обратный_порядок() улучшена базовая производительность, добавлен метод автоматического выбора инструкций SSE2, что повысило производительность.Оптимизация: Улучшена производительность функций внутреннего кодирования в модуле.
Исправление: В функции L_NodeV8_выполнить_код2() исправлены ошибки выполнения.
Исправление: В функции L_yyjson_только_чтение_получить_объект_val() исправлена утечка памяти.
Исправление: В функциях L_кодировка_usc2_к_unicode() и L_кодировка_usc2_к_ansi() исправлено исчезновение символов "\" в строках.
Обновление сторонних библиотек или модулей:
- Модуль для поддержки пакетирования и распаковки переменных: обновлен до версии 2.3, исправлены проблемы с аварийным завершением при использовании библиотеки в виде DLL.
- yyjson: обновлен до версии 0.10.0.
- Curl: обновлен до версии 8.11.0_4.
- RocksDB: обновлен до версии 9.7.2.
- OpenCV: обновлен до версии 4.10.0.
Другие обновления зависимых библиотек пропущены.
Добавлены функции L_NodeV8_*(), которые упаковывают nodejs для выполнения функций V8, обеспечивая безопасное выполнение JavaScript без сбоев, поддерживают смешанный вызов в многопоточной среде, пример файла: пример_NodeV8.e
Добавлена поддержка функции двойного щелчка мышью для редактирования содержимого ячеек в L_виртуальной_таблице(класс), пример файла: пример_виртуальная_таблица_двойной_щелчок_редактирование.e
Добавлена функция L_WSS_HTTP_заголовки_формат_в_ключи_значения_массив(), которая быстро преобразует формат HTTP-заголовков в L_ключи_значения_массив, используемый для параметров заголовков в L_WSS_соединение()
Добавлена опция L_WSS_соединение(использование_синхронного_приема_сообщений) по умолчанию равна false, при включении сообщения текста/байтового массива могут быть получены только с помощью L_WSS_прием_синхронного_сообщения()
Добавлена функция L_WSS_прием_синхронного_сообщения(), которая извлекает сообщения из внутренней очереди текущего соединения; возвращает true, если есть сообщения, и false, если сообщений нет
Добавлены функции L_кодировка_является_GB18030(), L_кодировка_является_ANSI(), L_кодировка_является_BASE64(), L_кодировка_является_BASE16(); упакованы для использования при написании инструментов для выводаДобавлена функция `L_удаление_пустых_каталогов()`, которая удаляет существующие пустые каталоги; в случае, если каталог содержит файлы/подкаталоги, операция завершается неудачей.Добавлена функция `L_каталог_удаление()`, которая удаляет существующий каталог и все его подкаталоги и файлы; пожалуйста, используйте эту команду с осторожностью. Возвращает `true` при успешном выполнении и `false` при неудаче.
Улучшена функция `L_файл_удаление()` с добавлением параметра `"обработка_только_доступа"`, по умолчанию равна `true`, автоматически обрабатывает атрибут `"только для чтения"` файла.
Улучшена функция `L_файл_копирование()` с добавлением параметра `"обработка_только_доступа"`, по умолчанию равна `true`, автоматически обрабатывает атрибут `"только для чтения"` файла.
Улучшены функции `L_кодировка_является_utf8()` и `L_кодировка_является_utf82()` с обновлением кода для повышения производительности; упакованы для использования при написании инструментов для вывода.
Улучшен `L_виртуальная_таблица(класс)` с добавлением проверки завершения создания виртуальной таблицы, чтобы избежать вызова до завершения создания, что может привести к непредвиденным проблемам.
Улучшена поддержка GPU в OpenCV для обнаружения объектов, удалены модули Vulkan, теперь используется OpenCL.Улучшены функции L_CV_шаблон_соответствие() и L_CV_шаблон_соответствиеEx() с добавлением параметра "режим_соответствия": по умолчанию равен 0, что означает нормализованное соответствующее значение, подходящее для случаев, когда яркость и контрастность целевого изображения сильно изменяются, но форма остается неизменной. Значение 1 означает нормализованное соответствующее значение, подходящее для случаев, когда яркость и контрастность целевого изображения не сильно изменяются, но присутствуют некоторые шумы. Значение 2 означает нормализованное значение квадратичного расстояния, подходящее для большинства случаев, особенно когда между шаблоном и целевым изображением есть значительное различие в яркости.Улучшены классы L_winhttp(), L_curl_http2winhttp() >>> auto() с автоматическим заполнением часто используемых заголовков, по умолчанию равен false. Оптимизация: L_чтение\_запись\_лок(класс) >>> выход\_из\_чтения(), выход\_из\_записи().
Если используется неправильно, будет выведено сообщение об ошибке и активировано исключение памяти, что облегчит локализацию ошибок и определение потока выполнения кода.
Исправление: L_RocksDB(класс) >>> очистка().
Исправлено возможное появление бесконечного цикла в новой версии RocksDB, использована другая реализация.
Исправление: L_окно\_получить\_содержимое\_контрола(), L_окно\_получить\_содержимое\_контролаW().
Исправлено отсутствие одного символа в конце возвращаемой строки.
Исправление: L_система\_счисления\_шестнадцатеричное\_в\_десятичное().
Исправлено исключение, вызванное наличием пробела в начале переданной строки.
Обновление сторонних библиотек или модулей:
Curl: обновлено до версии 8.10.1_5.
Другие дополнительные зависимости обновлены, подробности опущены.
Добавлено:
L\_виртуальная\_таблица(класс) >>> Запретить\_установку\_переносимости\_ширины\_столбцов()
Добавлено:
L\_указатель\_сравнение\_памяти() версия на ассемблере; сравнивает по байтам два блока памяти на равенство, возвращает при обнаружении различий; возвращает истину при совпадении, ложь при различии
Добавлено:
【Многопоточная\_безопасность\_вызов\_оконных\_компонентов】Прогресс\_бар\_EX\_позиция()
Добавлено:
【Многопоточная\_безопасность\_вызов\_оконных\_компонентов】Супер\_список\_окна\_EX\_установить\_иконку\_проекта\_целое(), Супер\_список\_окна\_EX\_установить\_иконку\_проекта\_байтовое\_множество(), Супер\_список\_окна\_EX\_установить\_иконку\_проекта\_пустое()
Добавлено:
【Многопоточная\_безопасность\_вызов\_оконных\_компонентов】Окно\_загрузить()
Добавлено:
L\_время\_получить\_номер\_недели2() Возвращает номер недели в году и номер недели в месяце
Добавлено:
L\_таймер\_запуск(класс) >>> Получить\_форматированное\_время2() Возвращает строку, содержащую время с момента запуска таймера до выполнения текущей команды
Добавлено:
L\_CV\_матрица\_кодирование\_в\_память() Преобразует матрицу в указанном формате изображения, возвращает результат кодированияУлучшено:
L_обработка_исключений(класс) >>> Инициализация(регистрация_глобальной_цепочки_обработки_исключений) Совместимость с MSVC улучшена, комментарии обновлены: по умолчанию истинно; эта функция позволяет приоритету обработки исключений быть максимально высоким, что может привести к множеству записей исключений, что может вызвать проблемы совместимости; можно установить в ложь; если установить в ложь, обработка исключений может быть нарушена. Глобальный реальный режим кодирования не зависит от этого параметра
Улучшено:
L_таймер_запуск(класс) >>> Получить_форматированное_время() Использование ассемблера для переписания вычислений ускоряет процесс, а также добавляет вычисление года
Исправлено:
【Новый】Динамический_тип_данных_генерация_кода_1.4.2.e Обновление вызова пула памяти для соответствия модулюУдалено:
L_поток_ответ_событие(класс) Этот класс является устаревшим кодом, давно заменен 【Многопоточная_безопасность_вызов_оконных_компонентов】
Удалено:
【Многопоточная_безопасность_вызов_оконных_компонентов】Супер_список_окна_EX_установить_иконку_проекта() Общие параметры были заменены на конкретные типы данных
Исправлено:
L_время_получить_номер_недели() Возвращаемое значение не соответствует ожиданиям
Исправлено:
L_часы(класс) Временная ошибка при установке периода часов в ноль
Исправлено:
L_CV_матрица_создание_из_байтового_множества(), L_CV_матрица_создание_из_памяти_изображения() Проблема с загрузкой изображений в формате WebP
Обновление сторонних библиотек или модулей:
hpsocket: Обновлено до версии 6.0.3, включено использование mimalloc для улучшения производительности и дальнейшего уменьшения размера
Curl: Обновлено до версии 8.10.1_2
RocksDB: Обновлено до версии 9.6.1
OpenCV4: Обновлено до версии 4.8.0#22
Другие дополнительные зависимости обновлены...
Добавлены функции, связанные с OpenCV, примеры загружены в git; в настоящее время основное внимание уделено шаблонному соответствию, структура кода находится в стадии планирования, в будущем будут добавлены дополнительные функции в зависимости от требований.
Добавлены: [мультипотоковая безопасность вызова компонентов окна] Супер-список EX_Установить_иконку_пункта() Спасибо [без_никнейма] члену клуба за дополнительное спонсирование 88 юаней
Добавлены: L_Файл_Записать_в_файл(), L_Файл_Прочитать_из_файла() для замены и расширения команд чтения и записи файлов в языке EasyLanguage, эти команды в языке EasyLanguage иногда зависают на несколько секунд.
Добавлены: L_Корутина(класс) >>> Получить_текущее_количество_задач() Получает текущее количество задач, которые выполняются параллельно, это значение можно использовать для контроля параллелизма.
Улучшено: [мультипотоковая безопасность вызова компонентов окна] Внутренняя логика кэширования данных переписана, что значительно повысило производительность, добавлено кэширование для практически всех компонентов.
Теперь каждая деталь каждого компонента кэшируется отдельно, например, каждая строка и каждый столбец в супер-списке. Разница в производительности была проверена на процессоре 5950x, и без кэширования производительность увеличилась примерно в 70 раз.Также добавлен параметр для немедленного обновления кэша, что позволяет немедленно синхронизировать изменения в определенных компонентах. Улучшено: переписана логика перехвата исключений в модуле для функции «внешнего реального времени лога кода», которая теперь может использоваться в релизной версии программного обеспечения и значительно сократила использование места на жестком диске. Также добавлены функции поиска данных, теперь не требуется ручное копирование и вставка для анализа и обработки. Улучшено: код NCNN внутри модуля был развязан от OpenCV, что позволяет использовать только OpenCV с меньшим объемом. Улучшено: исправлены случаи злоупотребления блокировками чтения и записи внутри модуля, заменены на блокировки от Microsoft, чтобы избежать потери производительности при нагрузке процессора на 100%. Улучшено: внутренняя блокировка строки внутри класса L_Виртуальная_таблица был скорректирован, и избегаются возможные проблемы смертельного замыкания. Улучшено: частота выделения и освобождения памяти внутри класса L_Виртуальная_таблица при обработке сообщений окна была снижена. Улучшено: L_Операция_Битовые_атрибуты_существуют() был переписан в чистом ассемблере.Улучшено: внутренний процесс поиска приватных членов класса внутри класса L_Пул_потоков был уменьшен, использован встроенный ассемблер, после нескольких обновлений в предыдущей версии общая производительность была увеличена на 30%.
Улучшено: координаты слева, верхнего края, ширины и высоты результатов обнаружения YOLO внутри класса L_ncnn_yolo были изменены на целочисленные значения (округление до ближайшего целого числа).
Исправлено: L_Чтение_и_запись_файла_вставка_данных() предыдущая логика была написана не очень хорошо, что приводило к зависанию, переписана новая версия.
Исправлено: L_Пул_потоков >>> Получить_текущее_количество_потоков() баг, который приводил к зависанию при вызове после создания пула потоков или его уничтожения (внутренняя логика блокировки была изменена, забыли освободить здесь). Исправление: [Многопоточная безопасная вызов окна компонента] Высокая таблица_получить данные() возвращает общий тип память утечка проблемы
Обновление сторонних библиотек или модулей функций/программ:
Обработка исключений в языке E: обновлено до версии 6.2.0
NCNN: обновлено до версии 20240820
mmkv: обновлено до версии 1.3.9
Curl: обновлено до версии 8.9.1_3
hpsocket: обновлено до версии 6.0.2.1
Удалено: L_Memory_Pool (класс) Внутренний пул памяти, реализованный мной ранее на чистом языке EasyLanguage, был удален, теперь остается только mimalloc. Оригинальный режим пул памяти 1 был изменен на: не использовать пул памяти.
Переименовано: L_Memory_Pool_*() Подпрограммы больше не используют глобальный класс, что позволяет уменьшить количество обращений к памяти и немного улучшить производительность.
Добавлено: L_Создать_регулярное_выражение(), L_Найти_все_соответствия_регулярного_выражения(), L_Получить_количество_соответствий_регулярного_выражения(), L_Получить_соответствующий_текст_регулярного_выражения_по_индексу(), L_Освободить_результат_поиска_регулярного_выражения(), L_Разрушить_регулярное_выражение()
Обертка для библиотеки pcre2, поддерживающая JIT-компилятор, универсальные функции вызова + внутренняя обертка на чистые указатели, использует глобальный пул памяти модуля, высокая производительность, потокобезопасность.Добавлено: L_Таблица_виртуальных_функций (класс) >>> Создание (режим с приоритетом UI) По умолчанию установлено значение "ложь" = приоритет подпроцессов, в этом случае подпроцессы будут быстрее конкурировать за данные с UI-потоком, что может привести к замедлению UI при высокой конкуренции; "истина" = установка логики внутреннего блокировочного механизма для обеспечения приоритета обновления UI, в этом случае все операции над виртуальной таблицей будут ожидать обновления UI, то есть если UI замедлился, скорость операций над виртуальной таблицей также уменьшится.
Добавлено: [Потокобезопасные вызовы компонентов окна] Супер-список_установить_текст_элемента_W, редактор_текста_установить_позицию_курсора, редактор_текста_получить_позицию_курсора, редактор_текста_вставить_текст, редактор_текста_вставить_текст_W, редактор_текста_установить_длину_выделенного_текста, редактор_текста_установить_форматирование_выделенного_текста, редактор_текста_получить_содержимое, редактор_текста_установить_содержимое
Спасибо [члену без никнейма] за дополнительное спонсирование 288 юаней за эти новые функции.
Добавлено: редактор_текста_получить_содержимое(), переключатель_одиночного_выбора_выбрать(), переключатель_выбора_выбрать(), редактор_текста_EX_получить_содержимое(), переключатель_выбора_EX_выбрать() Эти команды получили новый параметр [время кэширования]Единица измерения: миллисекунды; По умолчанию установлено значение 0 = без кэширования данных; Этот параметр указывает, насколько долго состояние компонента будет кэшироваться после чтения, чтобы избежать прямого использования компонента (для снижения нагрузки на окно и предотвращения замедления).
Каждый компонент имеет независимое время кэширования, что позволяет улучшить производительность при параллельном чтении в многопоточной среде.
Добавлено: L_Вычисление_адреса_элемента_массива() Ассемблерное вычисление; Возвращаемое значение = начальный адрес + (элемент - 1) × размер элемента
Добавлено: L_Вычисление_выравнивания_целое_число(), L_Вычисление_выравнивания_длинное_число(), L_Вычисление_выравнивания_двойная_точность(), L_Вычисление_выравнивания_десятичная_точность() Ассемблерные версии.
Добавлено: L_Общие_диалоговые_окна_открыть_файл(минимальное_количество_поддерживаемых_файлов) Этот параметр является количеством буферов; По умолчанию установлено значение 100, если требуется поддержка множественного выбора большого количества файлов, этот параметр можно увеличить.
Добавлено: L_MMKV (класс) >>> Получить_все_категории() Получает все категории информации. Добавлено: L_RocksDB(класс) >>> колонки_все_колонки() извлекает информацию обо всех колонкахДобавлено: L_потоковый_пул(класс) >>> создать(возврат_события_освобождения_очереди) устанавливает данные внутренней очереди потокового пула. Перед освобождением будет вызван обратный вызов подпрограммы (подпрограмма принимает один параметр типа int: ID очереди). Вы можете освободить дополнительные данные очереди здесь, например, передача указателя на данные при вставке в очередь может быть полезной при остановке потокового пула; каждый потоковый пул выполнит текущий обратный вызов только один раз.
Оптимизировано: L_чтение_запись_записать_текст()、L_чтение_запись_вставить_строку_текста()、L_чтение_запись_вставить_текст()、L_чтение_запись_записать_строку_текста() текстовые параметры были заменены на универсальные, поддерживающие передачу текстовых переменных или указателей.
Оптимизировано: L_очередь(класс) улучшена логика ожидания таймаута при внутреннем извлечении из очереди и развязана с L_потоковый_пул(класс).
Оптимизировано: L_потоковый_пул(класс) улучшена логика взаимодействия с L_очередь(класс).
Оптимизировано: L_потоковый_пул(класс) при уничтожении потокового пула улучшена логика взаимодействия.
Исправлено: L_MMKV(класс) проблема с возможным неудачным чтением данных (длина внутренних данных не была получена, но записанные данные остаются безопасными).Исправлено: L_инкрементальное_обновление(класс) >>> после определенного обновления объединить разницу патча() проблема с ошибочным вычислением смещения указателя, приводящая к аварийному завершению
Исправлено: L_операция_двойная_точность_в_текст(), L_операция_двойная_точность_в_текст2(), L_операция_двойная_точность_в_текстEx(), L_операция_двойная_точность_в_текстEx2() проблема с вероятностью возврата неверных данных
Исправлено: L_общий_диалог_открыть_файл(возвращаемый_путь_выбранного_файла) проблема с отсутствием "\" в конце пути при выборе нескольких файлов
Обновление сторонних библиотек или модулей:
Поддержка модуля: обновлена до версии 2.2, метод инициализации поддержки стал более стандартным
mmkv: обновлена до версии 1.3.6 (скомпилирована с использованием VC-LTL, поддерживает XP систему)
mimalloc: обновлена до версии 2.1.7 (скомпилирована с использованием VC-LTL, поддерживает XP систему)
Curl: обновлена до версии 8.9.0_1
RocksDB: обновлена до версии 9.2.1
OpenCV4: обновлена до версии 4.8.0#21
flatbuffers: обновлена до версии 24.3.25
libjpeg-turbo: обновлен до версии 3.0.3
openjpeg: обновлен до версии 2.5.2#1
liblzma: обновлен до версии 5.6.2
libpng: обновлен до версии 1.6.43#2
libwebp: обновлен до версии 1.4.0#1
protobuf: обновлен до версии 4.25.1
quirc: обновлен до версии 1.2
tiff: обновлен до версии 4.6.0#4
Перекомпилированные библиотеки из-за обновлений других библиотек: NCNN
Добавлено: L_ncnn_yolo (класс) - потокобезопасность; поддерживает модели фреймворка Darknet (yolov3, yolov4) с поддержкой一键转换模型源码, поддерживает GPU и другие оптимизации.
Добавлено: L_MMKV (класс) - потокобезопасность; производительность выше, чем у RocksDB; подходит для сценариев, где требуется хранение данных на жестком диске, и допустимо незначительное снижение производительности при сравнении с хеш-таблицами.
Добавлено: L_общий_диалог_открыть_папку() - создает общий диалог для открытия папки путем Hook.
Добавлено: L_упаковщик_создать(), L_упаковщик_добавить_данные(), L_упаковщик_получить_результат_упаковки(), L_упаковщик_уничтожить(), L_распаковщик_создать(), L_распаковщик_уничтожить(), L_распаковщик_получить_данные().
Добавлено: L_проверка_Xor_операция(), L_проверка_Xor_операция2() - похожи на rc4, но имеют более высокую производительность.
Добавлено: L_семафор (класс) и соответствующие версии подпрограмм.
Добавлено: L_потоковый_пул (класс) >>> добавить_в_очередь_универсальный_тип(), получить_параметры_задачи_универсальный_тип() - избегает необходимости преобразования параметров в байтовый массив при каждом вызове, что повышает производительность.
Добавлено: L_горячая_клавиша_ожидание_указанной_клавиши() - похожа на регистрацию горячей клавиши, но активно проверяет наличие указанной клавиши в текущем потоке.Оптимизировано: скорость отладки/компиляции модулей ускорена.
Оптимизировано: L_горячая_клавиша_*() - внутренний мониторинг исходного ввода теперь работает в фоновом потоке, что обеспечивает более стабильную производительность.
Оптимизировано: L_виртуальная_таблица (класс) >>> вставка_столбца_пакетная() - теперь [ширина столбца] и [способ выравнивания] могут быть пустыми, а количество элементов массива может быть меньше количества заголовков столбцов.
Оптимизировано: L_виртуальная_таблица (класс) >>> обеспечить_отображение() - теперь можно вызвать сразу после вставки нового элемента.
Оптимизировано: L_файл_создать() - теперь автоматически создает директорию, если она отсутствует.
Оптимизировано: L_текст_удалить_начальные_конечные_пробелы() - добавлены два параметра (по умолчанию true): удаление начальных пробелов, удаление конечных пробелов.
Оптимизировано: L_текст_получить_пиньинь() - результаты для многозначных слов теперь совпадают с ядром EasyLanguage, а также оптимизирована скорость инициализации при первом вызове, что значительно улучшило производительность.
Оптимизировано: L_RocksDB (класс) - внутренние настройки изменены для решения проблемы бесконечного увеличения размера файлов журнала; добавлены новые оптимизационные настройки.
Оптимизировано: L_большие_числа_*() - подпрограммы, которые теперь проверяют, если входные данные пусты.Оптимизировано: L_текст_заменить_подтекст_из_указателя_данных() - теперь правильно обрабатывает нечувствительность к регистру.
Оптимизировано: L_память_пул (класс) - теперь по умолчанию использует однопоточный режим mimalloc.
Оптимизировано: переписаны основные методы преобразования кодировки с использованием ассемблерного кода и уменьшено количество копий памяти, что удвоило производительность.
Оптимизировано: L_wss_соединение() - улучшена процедура рукопожатия через прокси s5, добавлены дополнительные сообщения об ошибках при неудачном подключении.
Исправлено: L_потоковый_пул (класс) >>> добавить_в_очередь() - теперь не приводит к утечке дескрипторов при указании времени ожидания. Исправления:
- Исправлено: L_Пул_потоков(класс) >>> Добавление в очередь() передача пустого байтового массива в параметрах вызова приводит к бесконечному циклу.
- Исправлено: L_Текст_получить_тип_символов() L_Текст_получить_текст() различение полноконечных знаков препинания и китайских символов.
- Исправлено: L_Получение_исключений(класс) использование после которого в режиме отладки EasyLanguage может привести к аварийному завершению программы (очень странно).
- Исправлено: L_RocksDB(класс) >>> Flush() вызов многопоточного режима приводит к аварийному завершению программы.- Исправлено: Динамический тип данных (генератор) для избежания уничтожения при обращении к глобальной переменной EasyLanguage со значением 0.Обновления сторонних библиотек или модулей:
- Microsoft mimalloc пул памяти: обновлен до версии 2.1.6.
- Curl: обновлен до версии DLL 8.8.0_1.
- Добавлено: L_Curl_http2winhttp(класс) >>> SetUploadDHead() Устанавливает формат заголовка запроса при загрузке данных.
По умолчанию значение ложно = используется "Content-Length: длина данных"; значение истина = используется "Transfer-Encoding: chunked".
Это добавлено для решения проблемы, когда некоторые HTTP-серверы не могут корректно обрабатывать заголовок "Transfer-Encoding: chunked", что приводит к невозможности получения загруженных данных (например, в случае E2EE).
Этот переключатель добавлен для обеспечения совместимости (в случае, если сервер требует "Transfer-Encoding: chunked").
- Добавлено: L_Текстовый_тип_добавить_данные_из_файла() L_Текстовый_тип_записать_в_файл(); L_Байтовый_тип_добавить_данные_из_файла() L_Байтовый_тип_записать_в_файл() Быстрое импорт/экспорт данных из файла.
- Добавлено: L_Виртуальная_таблица(класс) >>> Событие_текущий_элемент_изменен() Обратный вызов принимает три параметра типа int: hwnd, индекс элемента, значение элемента.
- Добавлено: L_wss_соединение() Добавлен новый параметр: возврат_сообщения_о_ошибке_соединения, который позволяет определить, на каком этапе произошла ошибка при неудачном соединении.
- Улучшено: Внутренний код модуля был переработан для решения этой проблемы, хотя ранее этот баг никогда не возникал, но для обеспечения безопасности изменения были внесены.
https://github.com/OpenEpl/TextECode/issues/10- Улучшено: L_Виртуальная_таблица(класс) >>> Получить_указатель_на_источник_заголовка() Добавлены комментарии для улучшения понимания поведения команды.
- Улучшено: Внутренние значения сообщений окон/потоков теперь регистрируются с помощью функции RegisterWindowMessage, а не задаются произвольно.
Это изменение затрагивает следующие части кода: L_Виртуальная_таблица(класс), L_Горячие_ключи_*(подпрограммы).
- Улучшено: Переписан L_Целочисленный_массив_*(), уменьшено количество операций умножения, что улучшило логику кода.
- Улучшено: Внутренний код поиска/обратного поиска текста/байтов был переработан, что затронуло почти весь модуль.
- Улучшено: При неудачном соединении L_wss_соединение() больше не вызывает событие разрыва соединения.
- Улучшено: L_Байтовый_тип_добавить_данные_из_байтового_типа() Добавлен возврат значения, которое возвращает длину внутренних данных.
- Исправлено: L_Байтовый_тип_добавить_данные_из_байтового_типа(), L_Байтовый_тип_установить_данные_из_байтового_типа() Исправлено проблема с падением при передаче пустого байтового типа (после переписи на ассемблере забыли проверять на ноль).
- Исправлено: L_DC_скриншот(класс), L_Битовая_картинка_скриншот(подпрограмма) Исправлено проблема с неправильным форматом данных битовой карты при некоторых условиях, что приводило к ошибкам при передаче данных скриншота в OpenCV. Причина заключалась в том, что при передаче скриншота в OpenCV возникали ошибки, а при отладке было обнаружено, что файловый менеджер Microsoft также не может корректно отображать миниатюры. Самое странное то, что некоторые просмотрщики изображений вообще не выдают ошибок. Я провел весь день, изучая информацию в интернете, и наконец-то всё починил.
- Исправлено: Баг в функции L_运算_计算对齐数值(), когда входное значение равно значению выравнивания, функция возвращала значение входного значения плюс значение выравнивания. Правильное поведение должно быть таким, чтобы функция возвращала входное значение.
- Исправлено: Баг в функции L_wss_连接(), когда сервер возвращает HTTP-код состояния, функция неправильно интерпретировала код, что приводило к незапланированному разрыву TCP-соединения (причина - я прочитал 4 байта вместо 2 байт, возвращаемых hpsocket).
Обновления сторонних библиотек или модулей:
- Curl:
DLL обновлено до версии 8.6.0_4
- hpsocket:
DLL обновлено до версии 6.0.1.6