문제

우리는 현재 SQL 데이터베이스에서 철수 한 데이터를 보유하고 다른 몇 가지 응용 프로그램 (웹 사이트, 웹 사이트 등)에서 사용할 수 있도록 캐시 시스템을 구축 할 생각을하고 있습니다. 캐시가 Windows 서비스로 실행되는 것으로 생각하며 기본적으로 캐시 항목을 보유하는 스마트 사전으로 구성됩니다. 내 질문은 응용 프로그램의 작업 세트에 제한이 있습니까 (Windows Server 2003에서 실행됩니다)? 아니면 물리적 기억의 양이 한계입니까?

도움이 되었습니까?

해결책

32 비트 또는 64 비트? 32 비트는 2GB (프로세스의 경우), 64 비트는 1TB (Enterprise Edition 2003 Server).

그러나 CLR 객체의 최대 크기는 2GB입니다. 64 비트에서도.

업데이트: 위의 정보는 2008 년에 정확했습니다 오드의 대답 보다 최근 정보. Windows 2016 서버는 최대 값을 가질 수 있습니다 24TB.

다른 팁

나는 최근 32 비트 프로세스에서 .NET의 메모리 제한에 대해 광범위한 프로파일 링을 해왔습니다. 우리는 모두 .NET 응용 프로그램에서 최대 2.4GB (2^31)를 할당 할 수 있다는 생각에 충격을 받았지만 불행히도 이것은 사실이 아닙니다. 그러나 우리를 위해 그것을 관리하는 경우, .NET 자체는 메모리 제한을 넓히는 일반적인 실제 애플리케이션에 대해 약 600-800MB를 차지하는 자체 오버 헤드가있는 것으로 보입니다. 이는 취향에 걸리는 정수 배열을 할당하자마자 의미합니다. 1.4GB, OutOfMemoryException ()을 볼 수 있어야합니다.

분명히 64 비트 에서이 한계는 나중에 (5 년 안에 채팅하자)이지만, 메모리의 모든 것의 일반적인 크기도 단어 크기가 증가하기 때문에 자랍니다 (~ 1.7 ~ ~ 2 배).

내가 확실히 아는 것은 운영 체제의 가상 메모리 아이디어가 하나의 프로세스 내에서 사실상 끝없는 할당 공간을 제공하지 않는다는 것입니다. 전체 2.4GB가 한 번에 실행중인 모든 (많은) 응용 프로그램에 대해 주소를 지정할 수 있도록 만 있습니다.

다음 테이블 MSDN 쿼리에 대한 가장 정확한 답변입니다. Image_File_LARGE_ADDRESS_AWARE 플래그는 관리되는 컴파일러에서 직접 설정할 수는 없지만 다행히도 사후 빌드를 설정할 수 있습니다. Editbin 유틸리티를 통해. 4GT는 /3GB 플래그를 나타냅니다.

alt text

32 비트 Windows에서는 /3GB 플래그로 Windows를 부팅하고 "대형 주소 인식"으로 앱을 표시하여 조금 더 메모리를 얻을 수 있습니다.

마티아스,

실제로 직접적인 질문에 대한 답이 아니라,이 문제에 접근하는 또 다른 방법은 큰 함정을 극복 할 수있는 일부 방법으로 캐싱 솔루션으로 큰 두통이 될 수 있습니다. (죄송합니다. 그 문제에 대한 권장 읽기가 없습니다.)

우리는 이전 프로젝트에서 이것을 구현했으며 다른 문제를 일으켰습니다.

오프라인 액세스를 위해 데스크탑에서 SQL Express를 사용하여 데이터베이스의 거울을 만들 수 있습니까 (또는 캐시에 필요한 비트)? 그런 다음 응용 프로그램을 가리키는 데이터베이스를 전환하기 만하면됩니다. 다른 문제가 있지만이를 저장소로 사용하고 서버로 재생할 수도 있습니다. 로컬 사본의 권한을 변경 하여이 방법이 필요한 경우 읽기 전용으로 만들 수 있습니다.

SQL 인덱스와 같은 사운드를 만들려고 생각하는 사전. 나는 당신이 그런 식으로 건축 할 수 있다면 당신을 위해 일을하기 위해 SQL에 의존 할 것입니다. 왜 그 바퀴를 재창조합니까? 그렇다면 캐시 만료 및 메모리 관리에 대해 신중하게 생각해야합니다. 특히 Windows 서비스 인 경우.

행운을 빕니다,

다른 Windows 프로그램과 마찬가지로 주소 공간별로 제한됩니다. 즉, 32 비트에서는 2GB의 주소 공간을 가질 수 있습니다. X64에서는 8TB를 가질 수 있습니다.

8TB의 물리적 메모리가 없으면 페이지로 시작됩니다.

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