2012-09-07 3 views
0

는 최근 다음 하드웨어가 모두 테스트에 사용 된 실버 라이트 5비동기/기다리고 있습니다 성능은 5

에 비동기/AWAIT (asyncctp) 기능에 관련하여 몇 가지 테스트를 수행 한 :

  • 인텔 SNB의 2.3g
  • 8g DDR
  • 윈도우 7-64 비트
  • 실버 5
  • SQL 서버 2008 - R2는

테스트 논리는 다음과 같다 :

  1. 없이 비동기/await를 :와

    public void LoadMasterItem(string strUNIT_ID) 
    { 
        **DateTime dt = DateTime.Now;** 
        ctx.OBS_UNITs.Clear(); 
        this.IsMasterItemBusy = true; 
        ctx.Load(ctx.GetOBS_UNITQuery().Where(p => p.UNIT_ID == strUNIT_ID)).Completed += (sender, e) => 
        { 
         this.MasterItem = ctx.OBS_UNITs.FirstOrDefault(); 
         this.IsMasterItemBusy = false; 
         LoadDataArgs args = ExceptionManager.CheckDataContextResult(sender, args); 
         **var ts = DateTime.Now.Subtract(dt).Ticks;** 
         **string str = ts.ToString();** 
        }; 
    } 
    
  2. 비동기/await를 :

    public **async** Task<LoadDataArgs> LoadMasterItem(string UNIT_ID) 
    { 
        **DateTime dt = DateTime.Now;** 
        ctx.OBS_UNITs.Clear(); 
        var oper = await ctx.Load(ctx.GetOBS_UNITQuery().Where(p => p.UNIT_ID == UNIT_ID)).AsTask(); 
        LoadDataArgs args = ExceptionManager.CheckDataContextResult(oper); 
        if (args.LoadState) 
        { 
         this.MasterItem = oper.Entities.FirstOrDefault(); 
        } 
    
        **var ts = DateTime.Now.Subtract(dt).Ticks;** 
        **string str = ts.ToString();** 
        return args; 
    } 
    

진드기 실험 1 : 실험 2 5,304,010
진드기 : 30001

I는 상당한 정도 내 Silverlight 응용 프로그램을 개선 할 비동기/await를 사용하는 이유와 방법 궁금했다. 내 테스트가 '불공정'이라면 어떻게 향상시킬 수 있는지에 대한 의견을 나에게주세요.


디버깅 모드를 사용하지 않는 UI에 "str"값 바인딩을 만들었습니다. 이들은 IIS에서 호스팅되고 IE9에서 실행되었습니다. 1

진드기 : 2 5,504,010
진드기를 다음과 같이

resuls은

5,680,325가 응답을 주셔서 감사합니다, 그것은 내가 실제 성능에 대한 실수를 한 것 같다.

+0

다른 변경 사항이 적용되지 않았습니까? – Jodrell

+0

두 샘플 모두 동일한 테이블을 쿼리하는 데 사용 된 동일한 리아 서비스를 호출했습니다. 또한 테스트를 개별적으로 실행하고 다른 응용 프로그램을 닫았습니다. 그리고 나는 대학의 컴퓨터를 사용해 거의 동일한 결과를 얻었습니다. – justin

+3

그들은 둘 다 동일한 실제 결과를 얻었습니까? 실제로 당신이'str '을 가지고 * 아무것도하지 않는다는 것을 주목하라 - 어떻게 그 효과를 관찰 했는가? 디버거에서 이것을 실행하면 쉽게 큰 효과를 낼 수 있습니다. 디버거를 * 외부에서 실행하여 효과를 로깅합니다. –

답변

1

두 번째 샘플에서 시간을 확인할 때 실제로로드 작업이 완료된 것으로 생각하지 않습니다. 이 메서드는 비동기 적으로 실행되는 작업을 반환 했으므로 반드시 async 메서드에서 반환 할 때까지로드가 수행되었음을 의미하지는 않습니다.

+0

그러나 나는 trully str = ts에 코드 단계가있을 때 UI에서 두 번째 메소드를 호출하여로드 연산 결과를 얻습니다.ToString(); " – justin

+0

그리고 저는 개인적으로 IE9에서 개별적으로 실행 한 후 대응하지 않는 것보다 조금 더 빨리 샘플로드 데이터를 기다리고 있다고 생각합니다. – justin

1

await 연산자는 체인 호출을 처리 할 때 코드를 읽기 쉽고 덜 복잡하게 만드는 데 도움이됩니다.

관련 문제