C #에서 AppDomain 사용
C #에서 AppDomain의 가장 중요한 사용은 무엇입니까?
가장 중요한 사용은 코드가 있다는 것입니다 하나 가지고 있어야 당신이에 C #을이 실행에 쓰기 즉 모든 것을 - AppDomain
. 그것은 매우 중요합니다 ;-p
추가 앱 도메인 을 의미하는 경우 :
플러그인 및 기타 신뢰할 수없는 코드를 사용하면 격리 및 언로드 기능을 모두 사용할 수 있습니다 (어셈블리는 언로드 할 수 없으며 전체 앱 도메인 만 가능).
현재 동적으로 생성 된 dll을로드하는 데 사용하고 있으므로 언로드 할 수 있습니다.
또한 다른 구성 파일, 신뢰 수준 등을 설정할 수 있지만 복잡성 및 원격 작업과 관련된 비용이 있습니다.
MSDN에는 앱 도메인에 대한 섹션이 있습니다 .
상황에 따라 다르기 때문에 가장 중요한 용도가 무엇인지 말할 수 없습니다.
AppDomain은 애플리케이션의 샌드 박싱 부분에 유용합니다. AppDomain에서 확장을로드하고 다시 언로드 할 수 있습니다. 그렇지 않으면 수행 할 수없는 작업입니다. AppDomain에 특정 권한을 할당 할 수 있습니다. 다른 AppDomain의 기본 개체는 서로 액세스 할 수 없습니다.
AppDomain은 동일한 기능을 많이 제공하므로 경량 프로세스로 볼 수 있습니다. 그러나 Process와 달리 새 AppDomain에는 기본적으로 자체 스레드가 없습니다. AppDomain 및 스레드를 직접 관리해야합니다.
또한 AppDomain은 모두 동일한 관리 힙을 공유합니다. 이것은 일반적으로 문제가되지 않지만 문자열과 같은 일부 인스턴스가 AppDomain간에 공유되므로 놀라운 효과가있을 수 있습니다. 일반적인 사용의 경우 이는 문제가되지 않지만 잠금에 문자열을 사용하면 다른 AppDomain의 스레드가 서로 영향을 미칠 수 있습니다.
일반적으로 AppDomains를 사용하는 것은 일상적인 코딩 연습이 아닙니다. 이것은 고급 개념으로 간주 될 수 있습니다.하지만이 간단한 것부터 시작하여 "AppDomain"이라는 단어 뒤에있는 개념을 더 잘 이해하는 것이 중요합니다.
아키텍처 측면에서 그리고 가능한 한 간단하게 생각하면 AppDomain은 메모리 주소 지정 측면에서도 격리 컨테이너입니다.이 개념은 자세히 설명하기가 더 복잡하더라도 응용 프로그램에 필요한 모든 어셈블리가로드되고 실행됩니다. (나는 그것이 당신의 질문에 관한 것이 아니기를 바랍니다.)
거기에서 시작하여 AppDomain 클래스는 먼저 응용 프로그램 실행과 관련된 응용 프로그램 도메인에 대한 액세스를 얻는 데 사용되며 Singleton 속성 구현을 통해 수행 할 수 있습니다 AppDomain.CurrentDomain
. 이러한 방식으로 다음을 수행 할 수 있습니다.
- 로드 된 어셈블리에 대한 액세스 권한을 얻습니다.
- appdomain 공유 데이터 슬롯에 대한 액세스를 얻습니다.
- 생성 된 도메인의로드 된 어셈블리에서 생성 된 인스턴스를 언 래핑하는 관점에서 intems 마샬링.
그런 다음 AppDomain 클래스를 사용하여 다음을 수행합니다.
- 동일한 프로세스에서 더 많은 "도메인"을 생성합니다.
- 프로세스에서 어셈블리 실행;
- appdomain의로드 / 언로드 프로세스를 관리합니다.
AppDomains 생성 및 언로드, 동적으로로드 된 어셈블리와 같은 개념을 기반으로 하는 새로운 Microsoft 프레임 워크 (아직 출시되지 않음) MEF (Managed Extesibility Framework) 의 코드를 보는 것이 유용 할 수 있습니다 .
AppDomains로 할 수있는 일의 간단한 예와 예로서이 링크를 공유 할 수 있습니다 .
나는 당신의 질문에 대답하기를 바랍니다.
AC # AppDomain은 .NET 코드가 실행되는 논리적으로 격리 된 컨테이너입니다. .NET 코드를 실행하면 항상 기본 appdomain에서 실행됩니다.
이 30 분 유튜브 비디오를 보십니까? C # AppDomain이란 무엇입니까? AppDomain에 대해 자세히 설명합니다.
하지만 좀 더 자세히 설명하겠습니다. 타사 DLL을 가져 와서 응용 프로그램에서 사용하려고한다고 가정 해 보겠습니다. 그러나 제 3자가 일부 악성 코드를 가질 수 있다고 의심되므로 제한된 환경에서 제 3 자 DLL을 실행하려고합니다. 제 3자가 귀하의 c : 드라이브에 액세스하거나 파일을 삭제하는 것을 원하지 않는 것처럼 말입니다.
따라서 두 개의 AppDomain을 만들 수 있습니다. 하나는 타 사용이고 다른 하나는 자체 C # 클래스 용입니다. 타사 appdomain의 경우 c : 드라이브에 액세스 할 수없는 보안 제약 조건을 적용하고 C # DLL의 경우 무제한 앱 도메인을 갖게됩니다.
DLL의 런타임로드 및 AppDomain을 사용한 교차 통신의 표준 응용 프로그램에 대해서는 내 블로그를 참조하십시오. https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/
- DLL의 런타임로드 및 언로드 : 사용자가 런타임에 DLL을로드하는 프로젝트에서 작업했으며 프로그램 실행 중에는 Reflection을 사용하여 메서드가 실행되고 프로그램 실행 중에 언로드되었습니다.
- 내 주 실행 프로그램 보안 : 동적으로로드 된 DLL에서 발생한 예외가 내 주 AppDomain에 영향을 미치지 않도록 DLL을 동적으로로드하고 있습니다. 손상 시나리오의 경우 DLL을 효율적으로 언로드하고 다시로드 할 수있는 옵션이 있습니다.
- Cross-AppDomain 통신 : 런타임에 두 개의 DLL을 서로 다른 AppDomain에서 동적으로로드하여 서로 통신하도록 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/665668/usage-of-appdomain-in-c-sharp
'Development Tip' 카테고리의 다른 글
git 별칭을 어떻게 삭제할 수 있습니까? (0) | 2020.10.26 |
---|---|
Visual Studio 용 Xamarin을 사용하여 실제 Android 디바이스에서 디버그하려면 어떻게하나요? (0) | 2020.10.26 |
ID에 대괄호가 포함 된 경우 ID로 DOM 요소를 찾으시겠습니까? (0) | 2020.10.26 |
JSDoc에서 개방형 인수 함수를 문서화하는 올바른 방법 (0) | 2020.10.26 |
Maven 3 및 JUnit 4 컴파일 문제 : org.junit 패키지가 없습니다. (0) | 2020.10.26 |