Performance 为什么DeleteCriticalSection比InitializeCriticalSection慢得多?
我有超过20000个关键部分需要在应用程序关闭或服务停止时删除。但是我发现deleteCriticCasection函数非常慢。我做了一个测试:Performance 为什么DeleteCriticalSection比InitializeCriticalSection慢得多?,performance,winapi,critical-section,Performance,Winapi,Critical Section,我有超过20000个关键部分需要在应用程序关闭或服务停止时删除。但是我发现deleteCriticCasection函数非常慢。我做了一个测试: var CC: array[1..20000] of TRTLCriticalSection; procedure TForm1.Button1Click(Sender: TObject); var T: Cardinal; I: Integer; begin Memo1.Lines.Add('InitializeCriticalSe
var
CC: array[1..20000] of TRTLCriticalSection;
procedure TForm1.Button1Click(Sender: TObject);
var
T: Cardinal;
I: Integer;
begin
Memo1.Lines.Add('InitializeCriticalSection:');
T := GetTickCount;
for I := 1 to 20000 do
InitializeCriticalSection(CC[i]);
Memo1.Lines.Add(IntToStr(GetTickCount - T));
EnterCriticalSection(CC[3009]);
Memo1.Lines.Add('--------------');
LeaveCriticalSection(CC[3009]);
Memo1.Lines.Add('DeleteCriticalSection:');
T := GetTickCount;
for I := 1 to 20000 do
DeleteCriticalSection(CC[i]);
Memo1.Lines.Add(IntToStr(GetTickCount - T));
end;
结果是:
InitializeCriticalSection:
62
--------------
DeleteCriticalSection:
2262
有什么好的建议吗?当你只使用delphi时,有什么理由用各种语言来标记它吗?建议:(1)不要使用太多的关键部分。拥有超过10倍的处理器数量对你没有任何帮助。(2) 退出,当进程终止时,关键部分将不复存在。你究竟为什么需要这么多关键部分?通常使用单个CS来保护代码部分不被多个线程执行;拥有2万只真是太可怕了。