2011-09-12 3 views
-1

xna 및 windows 양식에 문제가 있습니다. 저는 xna를 사용하여 컨트롤을 개발했으며, 저는이 컨트롤을 Windows 폼 안에서 사용했습니다. 내 문제는 새로운 양식을 열면 xna를 사용하여 컨트롤을 완전히 덮을 때 시작됩니다. 그것이 일어날 때 cpu 사용법은 50 % 이상에 가고 유지한다. 그러나 xna 컨트롤의 작은 부분이 보이면 CPU 사용량이 경미한 수준 (1 ~ 10 % 정도 더 많거나 적지 만 그 이상은 아닙니다)으로 떨어집니다. 여기 C# windows forms 및 xna - 높은 CPU 사용량

는 XNA 파라미터 설정을 미리

parameters = new PresentationParameters(); 

      parameters.BackBufferWidth = Math.Max(width, 1); 
      parameters.BackBufferHeight = Math.Max(height, 1); 
      parameters.BackBufferFormat = SurfaceFormat.Color; 
      parameters.DepthStencilFormat = DepthFormat.Depth24; 
      parameters.DeviceWindowHandle = windowHandle; 
      parameters.PresentationInterval = PresentInterval.Default; 
      parameters.IsFullScreen = false; 

      graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, 
               GraphicsProfile.Reach, 
               parameters); 

덕분이다.

pd : Windows XP에서만 발생합니다. 창문 7 나는 아무런 문제가 없다.

+0

누가 부정 투표를했는지 모르겠습니다. 그러나 그 사람이 그 질문에 대해 의심이 있는지 알고 싶습니다. 나는 모르겠다. 나는 그에게서 의견을 얻고 싶다. –

+1

나는 당신을 하향 회선시키지 않았지만, 왜 누군가가 당신의 질문이 무슨 일이 일어나고 있는지 이해할 수있는 충분한 정보를 제공하지 못하기 때문에 이해할 수있다. 당신의 코드는 컴파일되지 않을 것이다. 당신은 무엇이 잘못되었는지를 고치거나 심지어 이해하려고 노력하지 않습니다. –

답변

0

음. 나는이 문제를 해결했다. 왜 그런지 모르지만 작동합니다. 마지막에 XNA의 사용자 정의 드로잉 코드

난 그냥 쓰기 :

Thread.sleep(10); 
+0

나는 이것이 문제를 "해결"했는지 의심 스럽습니다. 그것이 사라지면 스레드 간의 경쟁 조건이 의심됩니다. 동기화 또는 잠금 코드를 조사하십시오. –

1

을 당신이를 사용하지 않는 경우 당신은, 당신의 그리기에() 함수를

Thread.Sleep(1); 

을 둘 필요 sleep 명령을 사용하면 XNA가 자동으로 최대 속도로 그리기를 실행하려고 시도합니다. 즉, 코어 중 하나를 식인합니다. 이것은 효과적으로 프레임 제한 단계의 역할을합니다. 이제 컴퓨터가 1000fps 이상에서 렌더링 할 수 없습니다. Thread.Sleep (10)을 사용하면 컴퓨터가 100fps로 제한되지만, 코드가 정상적으로 실행하려면 2ms가 소요되면 절전 (10)을 사용하면 코드가 80 프레임으로 줄어 듭니다.