Может ли код, выполняющийся в фоновом потоке, быть быстрее, чем в основном потоке VCL в Delphi?

Если у кого-нибудь был большой опыт работы с кодом синхронизации в основном потоке VCL по сравнению с фоновым потоком, я хотел бы узнать мнение. У меня есть код, который выполняет тяжелую обработку строк в моем приложении Delphi 6 в основном потоке. Каждый раз, когда я запускаю операцию, время для каждой операции колеблется около 50 мс в одном потоке на моем ядре i5 Quad. Что действительно вызывает у меня подозрение, так это то, что тот же код, работающий на старом Pentium 4, что и у меня, показывает то же время для операции, когда обычно я вижу, что код работает примерно в 4 раза медленнее на Pentium 4, чем на Quad Core. Я начинаю задаваться вопросом, может ли код занимать значительно меньше времени, чем 50 мс, но есть ли что-то в основном потоке VCL, возможно, обработка сообщений Windows или выполнение вызовов Windows API, что создает искусственный «пол» для операции. Обратите внимание, что операция запускается входящим запросом к сокету, если это имеет значение, но измерение времени не происходит до тех пор, пока данные не будут полностью получены.

Прежде чем я возьму на себя работу по перемещению всего кода в фоновый поток для тестирования, мне интересно, есть ли у кого-нибудь общие знания в этой области? Каков ваш опыт работы с кодом, работающим в основном потоке VCL и вне его? Обратите внимание, что измерения времени выполняются, когда во время тестов абсолютно нет активности, инициированной пользователем.

Мне также интересно, поможет ли повышение приоритета потока до уровня чуть ниже реального времени. Я никогда не видел значительного улучшения времени выполнения, экспериментируя с этими флагами.

- roschler

8
задан Robert Oschler 19 July 2011 в 03:54
поделиться