문제

이번 주에 설명 할 수없는 이상한 문제에 직면했습니다. 제 3 자 어셈블리 (Xceed Grid 및 일부 구성 요소)의 서명 된 버전을 사용하도록 응용 프로그램을 전환했으며 응용 프로그램 시작 시간이 화장실로 들어갔습니다. 응용 프로그램이 서명 된 어셈블리를로드 할 때마다로드하는 데 30 초가 걸렸습니다. 응용 프로그램 시작은 5 초에서 90 초 이상이되었습니다. 도대체 여기서 무슨 일이 일어나고 있습니까?!

다른 정보 :

  • .NET 3.5 SP1에서 실행되는 WinForms 앱입니다.
  • 컴퓨터에는 인터넷 연결이 없었습니다 (의도적으로 보안).
도움이 되었습니까?

해결책

이 링크를 살펴보십시오.

그들은 도움이 될 수 있습니다. 시스템의 구성은 .NET 프레임 워크가 어셈블리를 확인하기 위해 많은 추가 작업을 수행하고 있음을 의미 할 수 있습니다. 이 경우 그렇다면 너무 까다로워지지 않도록 구성 할 수 있습니다.

다른 팁

Jason Evans의 게시물에는 답변이 포함되어 있지만 링크 형태입니다. 실제 솔루션을 여기에 게시하는 것이 좋을 것이라고 생각했습니다.

실행 파일과 동일한 폴더에서 appname.exe.config 파일을 만듭니다 (여기서 AppName은 실행 파일의 이름입니다. 개발의 경우 디버그 출력 폴더에 있습니다). 여기에는 기본 구성 파일에 다른 항목이 없다고 가정하는 XML 파일이 표시됩니다. 이미 파일이있는 경우 필요에 따라 새 섹션/텍스트를 추가한다고 가정합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false" />
    </runtime>
</configuration>

다른 사람 이이 게시물을 발견 한 경우, 문제를 조금 더 추적했습니다. 방금이 페이지를 찾아서이 페이지를 찾았 기 때문입니다.

컴퓨터에있는 기존 CRL이 시간이 초과되었지만 아직 새 CRL로 업데이트되지 않은 경우 프로세스를 실행할 때마다 CRL을 점검하는 것으로 보입니다. CRL에서 타격을 입어 테스트 할 수 있습니다 http://crl.microsoft.com/pki/crl/products/codesignpca.crl 만료 날짜를 확인하십시오. 이제 작동하지 않는 IE 내에서 프록시를 구성하십시오. 기계 날짜를 만료 날짜를 지나서 신청서를 다시 설정하십시오.

NIC가 비활성화되면 CRL을 확인하지 않습니다.

NIC에 게이트웨이가없는 경우 CRL을 확인하지 않습니다.

프록시가 활성화되고 게이트웨이가 있으면 CRL을 확인하고 프록시에 문제가 있으면이 시간 초과를 경험하게됩니다.

인터넷에 성공적으로 연결하면 CRL 업데이트가 발생하면 당분간은 괜찮을 것입니다.

내 응용 프로그램은 .NET 2.0의 이전 XCreest 구성 요소를 사용하고 있었으며 영원히 작동하여 무슨 일이 일어나고 있는지 알아내는 데 시간이 걸렸습니다.

로드 서명 된 어셈블리는 확실히 될 것입니다 느리게 서명이없는 상대방보다 서명이 확인되어야하지만 이는 완전히 무시할 수 있어야합니다.

5 초에서 90 초로 지나가는가 ?? 나는 당신이 어셈블리 저자에게 연락하여 그들이 서명 만 변경했는지 물어봐야한다고 생각합니다 :-)

어셈블리 인증서가 확인되도록 보안 설정이 설정되어 있다고 생각합니다. 따라서 일부 인증서를 확인하기 위해 웹에 액세스하려고 시도한 다음 타임 아웃을 기다립니다 (30 초는 매우 일반적인 시간 초과 번호입니다).

그 30 초 안에 무슨 일이 일어나는지 보면 이것을 확인할 수 있습니다. 내 추측이 사실이 되려면 90 초 동안 CPU 사용이 거의없고 HDD 액세스가 거의 없어야합니다. CPU 사용이 높거나 HDD가 묶인 경우 다른 것입니다.

BTW : 또 다른 옵션은 HDD가 완전히 가득 차 있고 어셈블리가 극도로 단편화 된 경우입니다 (그러나 90 초는이 경우에 대해 들어 본 것보다 더 많을 것입니다).

"Step Over"로 Visual Studio에서 응용 프로그램을 시작하십시오. 이렇게하면 각 앱을 밟아 코드가 시작되므로 시간이 오래 걸리는 것을 확인할 수 있습니다. 나는 한 번 이것을 가지고 있었고, 내 SQL 서버가 실제로 엉망이 된 것으로 밝혀졌습니다.

왜 그렇게 오래 걸리는지 알아내는 또 다른 방법은 로딩 코드를 통해 브레이크 포인트를 흩어지고 병목 현상이 무엇인지 확인하는 것입니다. 응용 프로그램에 90 초가 걸리는 경우 ~ 전에 그것 당신의 먼저, 아마도 XCEED가 있거나 서명 된 어셈블리를로드하는 것과 같습니다.

BTW, 귀하의 응용 프로그램을 프로필하는 더 좋은 방법이 있다는 것을 알고 있지만이 빠른 'D Dirty Way는 그러한 문제를 디버깅하는 데 매우 훌륭하고 효율적입니다.

어쩌면 서명 된 어셈블리는 ngen'd가 아니고 서명되지 않은 어셈블리는 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 어쩌면 당신의 조립품이 아니며, 아마도 ngen'd는 아니고, ngen'd되지 않았을 것입니다.

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