Performance 为什么DeleteCriticalSection比InitializeCriticalSection慢得多?

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

我有超过20000个关键部分需要在应用程序关闭或服务停止时删除。但是我发现deleteCriticCasection函数非常慢。我做了一个测试:

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万只真是太可怕了。