2011-07-31 5 views
1

무거운 처리를 수행하고 내 컴퓨터가 거의 느려지는 .net winforms 응용 프로그램을 작성했습니다. 나는Thread.Priority를 ​​변경하여 프로그램 응답 속도 향상

Thread.CurrentThread.Priority 

대해 뭔가를 읽었지만 내가 메인 스레드보다 우선 순위를 부여해야 또는 "지체"내 컴퓨터의 둔화를 제거하기 위해 우선 순위를 낮출 경우 난 정말 이해 해달라고.

감사합니다.

답변

4

이것은 응용 프로그램과 추가 스레드가 수행하는 작업에 따라 다릅니다. UI 스레드 우선 순위를 실제로 높여서는 안되지만 백그라운드 스레드 우선 순위를 낮출 수는 있습니다.

UI를 반응 적으로 유지하려면 해당 스레드에서 과도한 처리를 수행하지 마십시오. 백그라운드 스레드에서 작업하십시오.

다소 모호하지만, 그렇다면 질문하십시오. 할 수 있으면 더 자세하게 들어가서 기쁘다. 희망이 도움이됩니다!

+0

글쎄 주 UI에서 프로세스를 제거하고 다른 스레드에 넣어야한다고 생각합니다. 그게 해결할 수 있지만 그 Thread.CurrentThread.Priority 그 문제를 해결할 것이라고 그냥. – syncis

+0

이 답변은 좋습니다. 나는 그것에 아무 것도 추가 할 수 없다. – Aliostad

+0

글쎄, 여기에 또 다른 질문이있다. 어떻게 모든 코드가 완료 되더라도 스레드를 만들고 그것을 유지할 수 있을까? 프로세스는 직접적으로 수행되지 않기 때문에 시간이 지나면 스레드에서 수행 할 수 있지만 죽지 않아야합니다. 방법? – syncis

0

일반적인 "느림"과 "지연"이 발생하면 개별 스레드의 우선 순위를 높이면 상황이 악화됩니다.

이 앱의 구조 방법을 정확하게 따라 다르지만 일부 무거운 처리에 가서 그 다음 나머지 시스템에 부정적인 영향을 미칠 충분한 프로세서 시간을 사용하고있을 경우 두 가지 옵션이 있습니다

  1. 나머지 시스템의 활동이 우선시되도록 처리 스레드의 우선 순위를 낮추십시오.
  2. 처리 스레드에 인위적인 나누기를 도입하십시오. 일반적으로이 작업은 스레드를 정기적으로 슬립 상태로 보내거나 다른 스레드 또는 이벤트 루프에 전달하여 수행됩니다.
0

천천히 실행되고 있기 때문에 시스템 내에서 더 높은 우선 순위를 필요로하는 스레드의 우선 순위 만 높이면됩니다. 우선 순위는 스레드가 다른 스레드보다 중요하다고 판단해야 함을 의미합니다. 이 경우, 나는 이것이 사실이라고 생각하지 않는다.

우선 순위를 낮추면 다른 작업에 처리 시간이 걸릴 수 있으므로 느리게 실행되는 것으로 나타납니다.

수행해야 할 작업은 스레드 (또는 스레드 수)를 추가하거나 다른 방법으로 처리 방법을 개선하는 방법을 고려하는 것입니다. Prioirty는 대답이 아닙니다.

1

예, 문제가 해결됩니다. ThreadPriority.BelowNormal (또는 Lowest)로 설정하면 컴퓨터의 다른 프로세스에서 시작한 모든 스레드가 작업자 스레드보다 먼저 예약됩니다. 특히 대화 형으로 사용하는 프로그램은 응답 성이 뛰어납니다. 결과적으로 작업자 스레드가 다른 프로세스가 CPU를 사용 중일 때 CPU 시간이 부족해질 수 있습니다. 가끔씩은 아주 자주 실행됩니다.

일반적으로 cpu 코어보다 많은 스레드를 시작하지 마십시오. Environment.ProcessorCount. 스레드 풀 스케줄러는 이미이 작업을 자동으로 수행하지만 다른 프로세스에는주의를 기울이지 않습니다.

+0

OP의 질문에 애매한 말을하기 때문에 다음 독자를 혼란스럽게하지 않기 위해 : 우선 순위를 낮게 설정하는 "it" UI (메시지 루프)를 실행중인 스레드. 특정 스레드가 UI를 "느리게"만드는 것을 확인하고 가능한 경우 다른 스레드가 스레드 수율을 제어 할 수 있는지 확인한 다음 해당 스레드의 우선 순위를 낮추십시오. – ToolmakerSteve