2013-11-26 2 views
3

컴퓨터의 파일을 검색하는 간단한 검색 유틸리티를 만들었습니다.
파일을 검색하고 검색 결과를 새로운 형식으로 표시하는 displayForm 함수를 호출하는 mainloop 함수에 일치하는 항목 목록을 만드는 함수가 search입니다.
search 함수가 약 1 초 만에 검색을 완료하더라도 시작 후 처음 응용 프로그램을 실행할 때마다 결과 창을 표시하는 데 걸리는 시간이 상당한 시간 (약 10 초)이 소요됩니다. 이는 시작한 후 처음으로 검색 할 때만 발생합니다. 그것은 처음 또는 다음 번 실행에 관계없이 시간의 거의 동일한 금액을 소요하고 displayForm의 작업은 매우 간단하기 때문에 내가 search 기능의 문제를 생각하지 않기 때문에양식을 여는 데 처음으로 시간이 오래 걸리는 이유는 무엇입니까?

나는 search 기능을위한 코드를 제공하고 있지 않다. 목록 상자를 만드는 것은 그것이 처음 또는 다음 번 실행에 관계없이 같은 시간이 걸립니다

public void displayForm() 
    { 
     // Do some stuff here 
     // Make a listbox and add items to display. 
     SearchForm.ShowDialog() ; 
    } 

또한, 몇 가지 경우 실험에 의해, 난 당신을 알려야합니다.
어떤 이유가있을 수 있습니까?

+1

몇 개의 항목에 대해 이야기하고 있습니까? – LarsTech

+3

처음 실행시에는 모든 것이 JIT되고 메모리에로드되어야합니다. 이후에 계속되는 요청은 사용할 준비가 될 때까지 훨씬 더 빠릅니다. 그건 정상입니다. 더 빠르게 만들려면 아마도 네이티브로 만드는 NGen을 사용하여 응용 프로그램을 컴파일해야합니다. 그렇지 않아도 .NET 런타임 기능 및 환경을 호출하거나 사용하지 않아도됩니다. 시나리오가 오래 걸리는 이유는 다양합니다. GPU 렌더링, 사용중인 컨트롤, 수 ... 선량은 그 밖의 것을 알고 있습니다. –

+0

@LarsTech 처음으로 시간이 오래 걸리며 예상대로 작동합니다. –

답변

11

이것은 전적으로 정상이며 코드와 관련이 거의 없습니다. 콜드 스타트 ​​시간은 하드 디스크의 속도에 좌우됩니다. .NET 응용 프로그램을 시작하는 데 필요한 많은 DLL을 찾아야 할 때 실망 할 수 있습니다. .NET 앱 전용 문제는 아니지만 Office 앱 및 Adobe Reader와 같은 대규모 관리되지 않는 앱에서도이 문제가 발생합니다. 어떤 프로그램은 로그인 할 때 실행되는 프로그램 인 "최적화 프로그램"을 설치하여 속임수를 쓰는 경향이 있습니다. 프로그램에서 필요로하는 DLL을 미리로드하여 파일 시스템 캐시에서 사용할 수 있도록하여 프로그램에서 SuperFetch를 무효화합니다.

운영 체제의 파일 시스템 캐시는 느린 디스크에 대한 매우 효과적인 솔루션이지만 속도를 높이기 위해 마일 길이의화물 열차와 같습니다. 유용한 데이터로 처음부터 채우는 데는 시간이 걸리므로 효과적인 디스크 전송 속도를 찾는 데는 최고 몇 메가 바이트/초입니다. 또한 사용자가 SSD를 좋아하는 핵심 이유는 훨씬 더 근본적인 솔루션을 제공합니다. 일단 경험이 있으면 결코 돌아갈 수 없습니다.

많은 훌륭한 기사에서 잘 다루어지기 때문에 가장 좋은 방법은 ".NET 콜드 스타트 ​​시간"을 검색하는 것입니다.

+0

+1 좋은 답변 ... – JonH

관련 문제