2014-03-25 2 views
0

ASP.Net 응용 프로그램에서 원시 바이트 데이터가 다소 큰 배열 (1 MB * 100)이 있습니다. 그들은 여러 사용자에게 매우 자주 방송해야합니다.asp.net 사용자간에 거대한 바이트 배열을 공유하십시오.

스레드가 백그라운드에서 데이터를 처리하고 수시로 업데이트합니다.

그들 사이의 버퍼를 공유하는 가장 좋은 방법에 대한 제안을 보내 주시겠습니까? 메모리에 대한 좋은 경우 같은 소리

답변

2

파일

메모리 매핑 된 파일을 가상 메모리에있는 파일의 내용을 포함 매핑. 파일과 메모리 공간 사이의 이러한 매핑은 여러 프로세스를 포함한 응용 프로그램이 메모리에 직접 읽고 쓰는 방법으로 파일을 수정할 수있게합니다. 은 .NET Framework 4를 시작으로, 당신은 같은 방법으로 메모리 매핑 파일에 액세스하는 코드를 관리 사용할 수있는 기본 Windows 기능에 액세스 메모리 매핑 된 파일

http://msdn.microsoft.com/en-us/library/dd997372(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/vstudio/system.io.memorymappedfiles.memorymappedfile

스레드가 데이터를 처리합니다.

ASP.Net 스레드입니까? 나는 IIS (why not)의 맥락에서 그런 종류의 작업을 수행하지 않을 것이다. 대신 Windows 서비스와 같은 IIS 외부의 별도 프로세스에서 공유 메모리를 관리하도록 제안합니다.

메모리 매핑 된 파일 메커니즘은 데이터를 업데이트하는 Windows 서비스와 필요에 따라 데이터에 액세스하는 개별 ASP.Net 작업자 스레드에 매우 적합합니다.

+0

답장을 보내 주셔서 감사합니다. Windows 서버를 사용할 수 있습니다. 그러나 콘텐트는 소켓을 통해 다른 서버에서 가져온 것이므로 서버에 실제 저장된 위치가 없습니다. 그게 당신의 대답을 바꾸나요? – beebee

+0

나는 영구적 인 파일로 메모리 매핑을 되돌릴 것이다. 그렇게하면 데이터는 작업자 프로세스 재활용 시간보다 오래 지속됩니다. +1 – usr

+0

@beebee : 저는 Windows 서비스가 아니라 Windows Server 운영 체제에 대해 말하고 있습니다. 데이터를 물리적으로 저장해야하는지 여부에 상관없이 내 대답은 변경되지 않습니다. 그의 대답에서 언급 한 것처럼, 메모리 맵 파일은 영속 파일에 의해 뒷받침 될 수 있지만 반드시 그럴 필요는 없다. 가상 메모리에만 존재할 수 있습니다. –

관련 문제