建议修改一处代码.
1、CnWizUtils.pas内有放多取得OTA 接口的函数,这些函数在短短的10分钟内总共调用有上百万次,经检测存在以下“问题”,
举一个例子:原函数:
function CnOtaGetEditBuffer: IOTAEditBuffer;
var
iEditorServices: IOTAEditorServices;
begin
Result := nil; //:=nil放在上面要占用该函数10-40%的时间,可能是接口取空值与实列取空值处理机制不一样,
QuerySvcs(BorlandIDEServices, IOTAEditorServices, iEditorServices);
if iEditorServices <> nil then
Result := iEditorServices.GetTopBuffer;
end;
建议改成如下表达:
function CnOtaGetEditBuffer: IOTAEditBuffer;
var
iEditorServices: IOTAEditorServices;
begin
QuerySvcs(BorlandIDEServices, IOTAEditorServices, iEditorServices);
if iEditorServices <> nil then
begin
Result := iEditorServices.GetTopBuffer;
Exit;//取得后直接退出,
end;
Result := nil;//没取得时再用:=nil,放在这里,不占用时间
end;
附件是我改好的CnWizUtils.pas
修改后测不出这些函数调用时间
2、还有一处建议,论坛灌水很不方便,刚才加附件(.pas)时,提示不支持该格式,退回来时原来打的字全没了,又得重新输,中招了好多次了,建议改改
3、还有一处 增加应用程序空闲通知,AddApplicationIdleNotifier,参数应为 TIdleEvent而不是TNotifyEvent,
TIdleEvent原型为TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object; 其中Done默认为True,
现在cw内的几个空闲过程如TCnEditControlWrapper.OnIdle调用很频繁,能否在Done上想想办法,空闲时只调用一次?
[ 本帖最后由 niaoge 于 2007-6-13 15:04 编辑 ]
Attachment:
CnWizUtils.rar (2007-6-13 14:30, 22.96 K)
Download count 398
|