2012-03-26 2 views
1

워드 문서의 모든 테이블을 반복하는 코드가 있으며 모든 셀의 너비 값을 읽습니다. 어떤 이유로 Windows가 최소화 될 때이 코드가 약 5-10 배 더 빠르게 실행됩니다. 아이디어를 얻으려면 with the window maximized, it takes ~0.02 seconds to make the Cell.Width call을 실행하면 with the window minimized, it takes .001 to .0015 seconds per call이됩니다.Word 창을 최소화하면 COM 속도가 빨라 집니까?

누구나이 문제의 원인이 될 수 있으며 창을 최소화하지 않고 이러한 결과를 재현 할 수 있는지 확인하십시오. 사용자로서 작업을 수행하기 위해 윈도우를 무작위로 최소화/최대화하는 것은 매우 이상합니다.

//doc and app are the active Document and Application respectively. 
    try 
    { 
     app.ScreenUpdating = false; 
     //app.WindowState = word.WdWindowState.wdWindowStateMinimize; //enabling this improves speeds by 5x to 10x 
     foreach (word.Table table in doc.Tables) 
     { 
      //loop over every cell in a table and read/store its cell.Width value. 
     } 
    } 
    finally 
    { 
     //you can alternatively store the original values here and restore them to that. For simplicity, I did not do that here. 
     app.ScreenUpdating = true; 
     app.WindowState = word.WdWindowState.wdWindowStateMaximize; 
    } 
+0

Excel에서이 동작을 발견했는데 이것이 확실한 대답은 아니지만 UI가 표시되어있을 때만 실행되는 코드가 있어야한다고 가정했습니다. 예를 들어 디스플레이를 업데이트하기 위해 이중 버퍼링을 수행하는 코드 . 내 생각에 Microsoft는 성능을 향상시키기 위해이 방법으로 코딩 한 것입니다. SIt는 중요하지 않을 때 UI 사이클을 건너 뛰는 논리적 인 의미를가집니다. 그러나 Office 개발 팀 직원이이 질문을보고 답변을 게시하지 않는 한 이에 대한 확실한 답이 없음을 확신합니다. – David

+0

나는 항상 워드에서도 이것을 눈치 챘다. MergeFields를 업데이트하는 중에 응용 프로그램을 최소화하여 보관합니다. 열어두면 모든 업데이트가 문서를 이동시켜 텍스트가 변경된 위치를 표시합니다. 물론 이것은 프로세스 속도를 늦 춥니 다. – Steve

+0

screenUpdating = false로 설정하면 UI에서 발생해야하는 버퍼링을 처리 할 수 ​​있다고 생각했습니다. 우리가 통제 할 수없는 다른 일이 있다고 생각하니? "읽기"작업으로 인해이 효과가 발생하는 것도 드문 것 같습니다. 쓰기 작업이면 더 이해할 수 있습니다. – Shark

답변

0

컨트롤의 많은이처럼 행동 : 목록이 표시되지 않는 경우에도 간단한 목록 상자에서 항목을 추가하는 것은 빠른이며,이 컨트롤이 표시되지 않는 경우 일부 있기 때문에 모든 메시지 처리를 중지합니다의 definetly입니다 UI 관련 (새로 고침, 입력 이벤트 등)

윈도우를 최소화하면 성능이 크게 향상됩니다 (충분한 COM 호출을 수행함). 윈도우를 최소화하고 이미지 스냅 샷으로 대체하여 사용자가 윈도우를 실제로 볼 수 없도록 제안합니다. 최소화. 회 전자 또는 진행률 표시 줄을 오버레이하여 사용자에게 어떤 일이 일어나고 있는지 알릴 수도 있습니다.

관련 문제