2013-03-08 4 views
0

Qt를 사용하여 내 응용 프로그램 중 하나를 프로파일 링하려고했습니다. 내가 찾은 결과는 Qt가 큰 스레드 사용자임을 보여주는 것처럼 보였습니다. 스레드를 많이 만들고 파괴하는 것 같습니다. 메모리 소비량의 최고점은 어느 것입니까? 사실입니까?Qt 스레드 최적화

"Qt 응용 프로그램을 최적화하는 방법"에 대한 연구를 해보았으나 지금은 관련성이 없습니다.

Qt로 프로그래밍 할 수있는 "일반적인 방법"이 있는지 궁금합니다. 특정 방식으로 스레드를 사용해야합니까? C++ 표준, 컴파일러에서의 페데 넌트 옵션 등을 제외하고 무엇이든 할 수 있습니까?

+0

C++의 일반적인 최적화 스레드부터 시작해야합니다. 예를 들어 http://en.wikibooks.org/wiki/Optimizing_C%2B%2B/Writing_efficient_code/Thread_usage – user1929959

+0

프로필을 어떻게 작성 했습니까? – cmannett85

+0

저는 Very Sleepy와 VTune Trial을 사용했습니다. Process Explorer로 프로세스를 보려고했습니다. 그러나, 나는이 도구에 익숙하지 않다 ... –

답변

0

일반적으로 말하자면 스레드를 많이 생성하고 파괴하면 매우 좋은 디자인이 아닙니다. 스레드가 동일하거나 유사한 일을한다고 가정하면 스레드의 고정 된 "풀"을 가져 와서 실행 한 후 현재 코드가 스레드를 파괴 할 때 풀에 되돌릴 수 있습니다.

또는 스레드가 영원히 실행되도록하고 적절한 IPC를 통해 데이터를 공급하십시오.

뭔가 특별한 일을하지 않는 한, 어떤 일을하는 데 약 25 분의 1이 걸리면 그렇게 할 수있는 스레드를 만들어서는 안됩니다. 그것은 고정 된 규칙이 아닙니다.

스레드는 그렇게 많은 메모리를 사용하지 않지만 각 스레드의 스택은 상당한 메모리를 사용할 수 있습니다.

0

QThread를 많이 만들고 파괴하는 경우 QThreadPool 또는 QtConcurrent을 사용하는 것이 좋습니다. 이것들은 예약 된 스레드를 보유하고 필요에 따라 제공합니다.

스레드를 많이 생성하고 파괴하지 않으면 문제가 다른 곳에서 발생합니다.

+0

당신은 "내 문제"라고했습니다. 높은 KillDispatchInterrupt CPI가 문제로 간주됩니까? –

+0

코드에 대해 많이 알지 못하기 때문에 문제인지 여부를 알기가 어렵습니다. 이 링크에는 해당 프로세스에 대한 정보가있는 것으로 보입니다. https://groups.google.com/forum/?fromgroups#!topic/comp.os.ms-windows.programmer.win32/pFJWpeHB3Vs – Phlucious

+0

Google 검색에서 주변을 검색 할 때 ' KiDispatchInterrupt가 IO 연산인지 뮤텍스 연산인지를 알려준다. 어느 쪽이든 그것은 CPU가 어떤 일이 생길 때까지 기다리고있는 것처럼 들린다. – Phlucious