2015-09-01 4 views
8

Я заметил, что время автономной работы значительно хуже на моем ноутбуке всякий раз, когда я открываю delphi 2010. Когда я трачу powercfg/energy, он показывает (среди прочего), что bds.exe запросил меньшее разрешение таймера, чем значение по умолчанию 15.6ms.Почему идея delphi увеличивает разрешение таймера платформы Windows?

Current Timer Resolution (100ns units) 10006 
Maximum Timer Period (100ns units) 156250 


Requested Period 10000 
Requesting Process ID 7996 
Requesting Process Path \Device\HarddiskVolume2\Program Files (x86)\Embarcadero\RAD Studio\7.0\bin\bds.exe 

Есть ли у дельфи есть веские причины для изменения разрешения таймера платформы? Также имеют ли те же самые версии последние версии ide?

+0

Я не вижу этого с XE7. Я не могу понять, как это проблема с 5-летней версией программного обеспечения, если вы не имеете в виду, что приложения, разработанные с помощью IDE, демонстрируют то же поведение. Проблема с чем-то вроде Delphi заключается в том, что это может быть сделано сторонним элементом управления. Это не обязательно IDE, которая меняет ситуацию. – Graymatter

+0

@Graymatter Я вижу это для XE7. Я также заметил, что Firefox также запрашивает 1 мс. Я ожидаю, что причина заключается в том, чтобы сделать «Sleep' ms точным. –

+0

@J Хорошо, я вижу это сейчас. Не знаю, как я пропустил это в первый раз. Я все еще думаю, что это довольно мелкая проблема. Средства разработки не совпадают с обычными приложениями. Отладчики, профилирование и т. Д. Все заставляют их стоять немного в стороне. – Graymatter

ответ

14

IDE использует очень старую версию VirtualTrees.pas для ProjectManager, StructureView и Log-Window. Эта версия вызывает timeBeginPeriod в своей функции InitializeGlobalStructures и устанавливает разрешение таймера на минимум (1). Он сбрасывается в блоке finalization.

VirtualTrees изменил это поведение с этой фиксацией:

2013-09-20 21:40:21: No longer changing timer resolution globally (#365) 

Но IDE все еще использует очень старую версию, которая еще не используется UnicodeString но WideString. Поэтому он не обновлялся с Delphi 2007.

+0

Спасибо, Андреас! Я думаю, если бы я установил таймер после открытия IDE, я мог бы получить немного лучшее время автономной работы. – Joe

+0

Вы случайно не знаете, почему Virtual Tree View изменил разрешение таймера? Было бы безопасно просто изменить его обратно во время работы IDE или может оказать неблагоприятное воздействие на Virtual Tree Views? – dummzeuch

+0

@dummzeuch Код был прокомментирован с помощью «Укажите полезное разрешение таймера для timeGetTime». Но на это может ответить только оригинальный автор (Майк Лишке). –