문제

.NET에서 작업하면 응용 프로그램 자체에 대한 일반적으로 좋은 성능을 제공하지만 응용 프로그램의 초기로드 시간은 상당히 큽니다. 그것의 많은 부분은 측정하기 어려운 로딩 어셈블리로갑니다.

GAC 또는 NGEN을 포함하지 않고 더 빨리로드 할 수 있도록 어셈블리에 적용 할 수있는 최적화가 있습니까?

이것은 WinForms 2.0 프로젝트입니다. 3.5로 업그레이드 할 수 있지만 사용자 기반을 제한합니다. 내 컴퓨터에 .NET Framework 3.5가 설치되어 있습니다.

도움이 되었습니까?

해결책

스플래시 화면을 최대한 빨리 보여주는 아주 작은 .exe를 만들었습니다. 그 후 나는 모든 것을 초기화합니다.

JIT-Compiler는 Jitted가있는 방법에서 호출되는 모듈을로드합니다. 따라서 스플래시 화면을 표시하는 메소드가 아직로드를 원하지 않는 모듈에서 메소드를 호출하지 않도록주의해야합니다.

예시:

internal sealed class Startup {

    // Call Startup.Run() from Program.Main to start the application
    internal void Run() {
        this.ShowSplash();
        this.ContinueStartup();
    }

    private void ShowSplash() {
        _splash = new Splash();
        _splash.Show();
        Application.DoEvents();
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    private void ContinueStartup() {
        // Do the startup here
    }
}

methodimpl (methodimploptions.noinlining)]이 필요하므로 continuestartup () 메소드가 JIT에 의해 인쇄되지 않으므로 모듈이 너무 일찍로드되기 때문입니다.

다른 팁

Ilmerge를 사용하여 모든 어셈블리를 하나의 파일로 병합 할 수 있습니다. 하나의 파일을 메모리로 읽는 것이 더 빠릅니다. 10 파일을 읽습니다. 나는 당신이 거기에서 부하 속도가 실제로 개선 될 것이라고 의심하지만.

또한 다른 어셈블리에 대한 모든 참조를 제거하고 UI를 사용자에게로드 할 수 있으며, UI (타이핑 또는 기타)를 사용하는 동안 Assembly.Load를 사용하여 필요한 모든 어셈블리를 사전로드하고, 반사 및 저장을 사용하여 필요한 모든 기능 포인터를 가져 오십시오. 내부 회원에서. 이러한 방식으로 응용 프로그램이 훨씬 빠르게로드됩니다. 그러나 나는 어떤 제정신 인 사람이 이와 같은 최적화를 할 것이라고 생각하지 않습니다.

얼마나 많은 어셈블리를 가지고 있는지 설명해 주시겠습니까?

.NET가 필요할 때 어셈블리를 즉시로드합니다. 여러 어셈블리에서 앱을 분할하기로 결정할 수 있습니다. 어셈블리는 배포 전략, 보안 및 성과를 사용하여 나누어야합니다. 대부분의 앱은 3 계층 구조 (UI, 비즈니스, 데이터)로 나뉩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top