Оказывается, причина, по которой HTMLEntitiesToUnicode()
не работал для меня, заключалась в том, что я читал данные из файла .json, в который были записаны данные, без указания того, что они должны быть сохранены в utf-8
. Исправление и последующее использование HTMLEntititesToUnicode()
, как описано выше, работало нормально.
Создание форм в потоке просто не будет работать. VCL и особенно визуальная часть, не ориентированы на многопотоковое исполнение. Разочаруйтесь в той идее и вместо этого оптимизируйте код, который заставляет форму занимать много времени для создания. Вы не сказали нам, какова медленная часть. Если можно ответить, что, возможно, мы можем предложить метод ускорения его.
В целом не возможно сделать хорошее задание улучшения производительности части кода, пока Вы не представили его и знаете точно, какова проблема. Иначе Вы просто тратите впустую свое время.
Как Riho указывает, создание формы не должно занимать время. Что может занять время, хотя, весь код, Вы вставляете конструктора или OnCreate-событие той формы.
Представьте свой код как предложенный Craig, так, чтобы Вы знали, какой код поднимает большую часть времени. Затем посмотрите, можно ли переместить часть того кода в отдельный поток.
Решение не будет легко, как
Вам нужны все формы сразу? В противном случае Вы могли задержать создание ко времени, где приложение неактивно (т.е. TApplicationEvents. OnIdle). Или просто отобразите хороший индикатор выполнения :)
Как выше, необходимо создать формы в потоке VCL. НО, Вы не должны делать всего там:
Если Ваши формы имеют много данных изображения, Вы могли бы удалить это из форм, и поместить его в файл ресурсов (или просто использовать необработанные файлы изображений),
В конструкторе Вашей формы запустите фоновый поток, чтобы считать данные изображения из ресурсов и сделать любые другие медленные вещи. Переопределите свое событие OnShow форм, чтобы гарантировать, что оно ожидает фонового потока для завершения, прежде чем форма будет отображена.
Просто поместите PostMessage на формы OnCreate и wirite процедура по форме для обработки постсообщения. Таким образом весь код, который занимает время, можно пихнуть из метода OnCreate. Я действительно соглашаюсь, хотя, только создайте форму, когда она необходима, и затем действительно реализуйте некоторую логику, чтобы решить если Ваша попытка освободить ее на завершение, или нет.. В зависимости от времени загрузки и шанса, что пользователь захочет это снова..
Выдумка Jens, Archersoft
Я не могу вообразить то, что заняло бы много времени в создании формы, для которого будут нужны потоки для разрешения. Если это - огромный объем данных, затем пытаются ограничить сумму, показанную первоначально.
Это - ярлык, который использовали мы, прежде для форм, которые имеют большой процесс, чтобы сделать на, создают. Отбросьте TTimer на форме и установите ее на ложь. OnCreate формы включают его. Затем поместите весь код, который Вы имели в OnCreate в Событие OnTimer. Установка Интервала к 250 - 500 достаточно.
Это не изящные решения, но его простое.
существуют некоторые большие формы там, как я сказал ранее. файл DFM похож на 3 МБ (включая данные изображения, конечно). Я на самом деле думаю, что большая часть времени создания происходит из-за этого, а не выполненного кода. Но возможно плохо разделение их и создает их, когда приложение неактивно, текущее время загрузки не является действительно большим (как 4 или 5 секунд), но плохо изучите его. спасибо за Ваши ответы.