성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>서버 유형의 COM+에 적용할 수 없는 Server GC</h1> <p> 다음의 문서에 나오듯이,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Using Per-Application Configuration Files ; <a target='tab' href='https://docs.microsoft.com/en-us/windows/win32/cossdk/using-per-application-configuration-files'>https://docs.microsoft.com/en-us/windows/win32/cossdk/using-per-application-configuration-files</a> </pre> <br /> 서버 유형의 COM+ 응용 프로그램에 app.config을 적용하려면 다음의 2개 파일을 생성한 다음,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [application.manifest 파일] <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" /> </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [application.config 파일] <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="myValue" value="TEST"/> </appSettings> </configuration> </pre> <br /> COM+ 응용 프로그램 속성 창의 "Activation(활성화)" 탭에서 "Application Root Directory(응용 프로그램 루트 디렉터리)"를 설정하는 것으로 가능합니다.<br /> <br /> <img alt='complus_app_config_1.png' src='/SysWebRes/bbs/complus_app_config_1.png' /><br /> <br /> 그런데 여기서 재미있는 것은, app.config의 모든 설정이 dllhost.exe 프로세스에 적용되지는 않는다는 점입니다. 그 한 사례로, ServerGC 유형에 대한 설정인데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="myValue" value="TEST" /> </appSettings> <span style='color: blue; font-weight: bold'><runtime> <gcServer enabled="true"/> </runtime></span> </configuration> </pre> <br /> 위와 같이 설정하고 COM+의 Activate 메서드에서 다음과 같이 확인해 보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [JustInTimeActivation(true)] // ...[생략]... public class TestComplus : ServicedComponent { public TestComplus() { } protected override void Activate() { string text = System.Configuration.ConfigurationSettings.AppSettings["myValue"]; Environment.SetEnvironmentVariable("TEST_ENV1", text); Environment.SetEnvironmentVariable("TEST_ENV2", GCSettings.IsServerGC.ToString()); } // ...[생략]... } </pre> <br /> dllhost.exe 환경 변수의 TEST_ENV1에는 "TEST" 문자열이 있지만, TEST_ENV2에는 "False" 값이 있는 것을 볼 수 있습니다. 실제로, GC가 발생했을 때의 호출 스택을 보면 "WKS" 문자열을 통해 이를 짐작할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <span style='color: blue; font-weight: bold'>clr!WKS</span>::gc_heap::mark_phase+197 <span style='color: blue; font-weight: bold'>clr!WKS</span>::gc_heap::gc1+a3 <span style='color: blue; font-weight: bold'>clr!WKS</span>::gc_heap::garbage_collect+54c <span style='color: blue; font-weight: bold'>clr!WKS</span>::GCHeap::GarbageCollectGeneration+10d <span style='color: blue; font-weight: bold'>clr!WKS</span>::gc_heap::trigger_gc_for_alloc+2d <span style='color: blue; font-weight: bold'>clr!WKS</span>::GCHeap::Alloc+2ab ...[생략]... </pre> <br /> 의도한대로 ServerGC가 사용이 되었다면 "SVR"이 나와야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <span style='color: blue; font-weight: bold'>clr!SVR</span>::gc_heap::plan_phase+12bb <span style='color: blue; font-weight: bold'>clr!SVR</span>::gc_heap::gc1+c3 <span style='color: blue; font-weight: bold'>clr!SVR</span>::gc_heap::garbage_collect+f0 <span style='color: blue; font-weight: bold'>clr!SVR</span>::gc_heap::gc_thread_function+74 <span style='color: blue; font-weight: bold'>clr!SVR</span>::gc_heap::gc_thread_stub+9a clr!&lt;lambda_5d4b8dc0ce3eb05b864e38505727a1c1&gt;::&lt;lambda_invoker_cdecl&gt;+51 kernel32!BaseThreadInitThunk+14 ntdll!RtlUserThreadStart+21 </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1550
(왼쪽의 숫자를 입력해야 합니다.)