2011-12-27 2 views
6

권한없이 새 AppDomain에 어셈블리를로드 한 작은 예제를 설정했습니다. 이 잘 작동, 어셈블리 파일 시스템에 액세스 할 수 없으며 소켓을 수신 대기 할 수 없습니다.AppDomain에서 스레드 만들기 방지

그러나 내가 막으려 고하는 또 다른 것이 있습니다. 스레드 생성입니다. 왜? 이론적으로이 어셈블리는 스레드를 만들어서 더 많은 스레드를 만들고 메모리를 가득 채울 수 있습니다.

나는 (내 의견으로는) 최선의 방법이라고 생각했다. AppDomain의 메모리 제한. 이것이 가능한가? 그리고 그렇지 않다면 스레드 생성을 피하기 위해 무엇을 할 수 있습니까?

는 (좋아, 나는 내가로드 할 폴더에있는 파일 시스템에 대한 액세스 권한을 준 스레드

Thread t = new Thread(this.DoWork); 
t.Start(); 

그리고 응용 프로그램 도메인

PermissionSet set = new PermissionSet(PermissionState.None); 
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | 
             FileIOPermissionAccess.PathDiscovery, 
             this.path)); 

AppDomainSetup info = new AppDomainSetup { ApplicationBase = this.path }; 

this.domain = AppDomain.CreateDomain("Sandbox", null, info, set, null); 

이 코드를 만들려면이 코드를 사용 조립, 이것은 단지 StrongName fullTrustAssembly = typeof(SecureInstance).Assembly.Evidence.GetHostEvidence<StrongName>(); 때문에 어느 나를 위해 작동하지 않는 것입니다

희망의/O를 도울 수 (:..

+1

당신은 할 수 없다. AFAIK :) 당신이 할 수있는 유일한 일은 스레드 풀에있는 스레드의 한계를 설정하는 것이다. – Elastep

+1

AFAIK 모든 AppDomain은 적어도 하나의 스레드를 생성해야한다. 그렇지 않으면 실행할 수 없다. 따라서 스레드 생성을 비활성화하면 모든 IMHO에서 실행할 수 없다는 것을 의미합니다. 무엇을 성취하려고합니까? – Yahia

+0

@Elastep 답변 해 주셔서 감사합니다. 어떤 소프트웨어라도 스레드 제한을 늘릴 수 있다고 생각합니다. 모든 것이 Java에 큰 도움이됩니다. 자바에서는 스레드 생성 전에 SecurityManager에 묻습니다. –

답변

2

쉬운 대답이없는 것처럼 보입니다. .NET 프로파일 링 API를 사용하여 AppDomain의 메모리 사용을 모니터하고 시도 할 수 있습니다. 여기에 대한 자세한 내용은 여기에서 확인할 수 있지만 일부 파기가 필요합니다. http://msdn.microsoft.com/en-us/library/bb384493.aspx

어쨌든 우선 순위가 낮은 별도의 프로세스에서 실행하고 싶다면 실행하지 않는 것이 좋습니다. 메모리 할당과 함께 모든 일들이 벌어지고, 프로세스에 영향을주지 않으며, OS가 그것을 죽이고 주 프로세스에 영향을 미치지 않습니까?

+0

위대한, 고마워, 나는 그것을 시험해 볼 것이다! –

+0

프로세스 수준 격리 문제는 여러 프로세스의 오버 헤드입니다. 스레드는 호스팅 AppDomain에 의해 안전하게 중단 될 수 없기 때문에 스레드를 만들 수 없도록해야합니다. 이 작업을 수행 할 수 없다면 아마도 "위반"을 모니터링하고 전체 프로세스를 중단해야합니다. 더 쉽지만 성능이 나빠지면 매번 프로세스가 비관적으로 중단됩니다. 그러나 그것은 행동하는 모든 사람의 행동을 아프게합니다. –

관련 문제