2015-01-28 16 views
1

ACE/TAO length() 함수가 너무 오래 걸립니다. 길이를 설정할 때 새로운 연산자를 사용하여 많은 양의 메모리를 생성하기 때문에. 누구도 TAO에서 길이를 설정하기위한 길이 함수에 대한 대체 방법을 알고 있습니다.ACE/TAO 성능 문제

감사의 ATCD 메일 링리스트에서 윌 OTTE에서

+1

귀하의 세부 사항이 귀하의 질문과 일치하지 않습니다. 제목 – Kevin

+0

wrongaken..changed – user1079341

답변

1

:

while (something) { 
    CORBA::ULong pos = seq.length(); 
    seq.length (pos+1); 
    seq[pos] = some_value; 
} 

과 성능이 있음을 관찰됩니다 나는이 같은 일부 코드를 가지고 있다고 생각하는거야 꽤 나쁜에 비해

std::vector<foo> vec; 
while (something) { 
    size_t pos = vec.size(); 
    vec.resize (pos + 1); 
    vec[pos] = foo (bar); // or the much more succinct vec.push_back (foo (bar)); 
} 

오른쪽?

답변은 크기 조정을 사용할 때 STL 구현이 사용자를 돕고 기하학적 성장을 제공하기 때문에 가능할 수 있습니다. C++ 표준에는 위와 같은 요구 사항이 없습니다 (크기 조정의 경우 push_back이 기하학적으로 확장 됨이 보장되므로 운이 좋았을 가능성이 높으므로 해당 동작에 의존해서는 안됩니다).

TAO 시퀀스는 이것을 제공하지 않으므로 반복해서 크기를 조정하면 크기를 조정할 때마다 새 버퍼 할당에 비용을 지불해야하므로 성능이 저하 될 것입니다. 현존하는 모든 요소들을 새로운 기본 버퍼에 복사하는 시간.

+0

네, 맞습니다 ... 성능 문제를 없애기 위해 하나의 트릭을 사용했습니다 : seq.length (max_possible_length); // 처음에 최대 길이를 설정하면 루프 내부의 크기 조정 오버 헤드가 제거됩니다. while (something) { pos + 1; seq.length (pos); seq [pos] = some_value; } – user1079341