2011-11-16 2 views
0

저는 기본적으로 거대한 엑셀 문서를 사용하여 계산을하고 마지막으로 페이지의 엑셀에서 출력을 추출하는 ASP.net 응용 프로그램을 만들고 있습니다. 일반적인 Excel 문서 크기는 15MB 이상일 수 있습니다. 따라서 한 시점에서 5 명의 사용자에게만 서비스를 제공하도록 응용 프로그램에 제한을 두어야합니다 (동일한 서버에서 실행되는 다른 웹 응용 프로그램이 영향을받지 않도록 메모리 사용을 제어하려면). 따라서 다른 모든 사용자는 게재 대기열에서 대기해야합니다. 계산에 사용되는 Excel은 서버에 캐시되고 새로운 요청이 오면 응용 프로그램은 캐시 된 Excel을 복제하여 계산에 사용합니다. 계산이 완료되면 사용 된 Excel이 삭제됩니다. (나는 다른 사람의 계산에 사용 된 엑셀을 재사용 할 수 없다)ASP.net 응용 프로그램에서 리소스 수를 제어하는 ​​방법은 무엇입니까?

내 질문은 "우리는 어떻게 엑셀 사용에 한계를 둘 수 있는가?"이다. 이 한도는 응용 프로그램 전체 (세션 너비가 아님) 여야합니다.

답변

0

리소스에 대한 액세스를 제한하려는 경우 일반적으로 객체 풀 패턴을 구현합니다. 이 question은 훌륭한 참고 자료입니다.

+0

감사합니다. 일단 내가 만든 리소스가 다시 사용되지 않으므로 Object pool patters를 사용할 가치가 있습니까? – KBBWrite

1

정적 변수를 사용하거나 Application State을 사용하여 응용 프로그램 레벨 공유 변수를 작성하여 진행중인 계산의 수를 유지할 수 있습니다. 공유 상태를 수정하는 동안 잠그는 것을 잊지 마십시오. 스레드 안전성을 제공하기 위해 Interlocked 메서드를 사용하는 정적 변수를 개인적으로 선호합니다.

다른 메모에서 실제로 솔루션을 다르게 디자인했습니다. Excel 기반 계산은 리소스가 많기 때문에 다른 프로세스 (아마도 Windows 서비스)에서이 부분을 옮깁니다. 이 과정에서 계산 요청을 수락하기 위해 WCF를 호스팅 할 것입니다 (메모 요청은 여러 가지 방법으로 수행 할 수 있습니다 - 요청 파일을 일부 폴더에 두거나 데이터베이스 테이블에 행 삽입 등). 모든 종류의 조절이이 프로세스에 적용됩니다. ASP.NET 응용 프로그램은이 서비스에 요청을 전달하고 사용자에게 결과를 비동기 적으로 업데이트합니다.

+0

고마워, 지금은 똑같은 것을 사용했지만 듣기를 원한다면 더 좋은 방법이있을 것이다. – KBBWrite

+0

편집에 표시된대로 @KBBWrite는 계산 프로세스를 다른 프로세스/서비스로 아웃 소스합니다. 주요 이점은 웹 응용 프로그램이 영향을받지 않고 작업 서비스 (계산 부분)가 독립적으로 확장 될 수 있다는 것입니다 (여러 서버에서 실행한다고 가정). – VinayC

+0

네, 그게 최선의 방법입니다. 그러나 클라이언트가 실제로 요청을 처리 할 시간이 스트레스 테스트에서 충족 될 수 없다면 서버에서 Windows 서비스를 호스팅 할 용의가 없습니다. 그래서 저는 ASP.net에서 먼저 테스트 할 R & D에 참여했습니다. – KBBWrite

관련 문제