2014-01-28 1 views
0

현재 웹 응용 프로그램에서 하나의 파일을 사용하여 표 영역 (zip, lats, longs 등)을 당겨서 디버깅하는 동안 잠재적 인 문제를 발견했습니다.부하가 많은 상태에서 webapp에 파일을 하나씩 파일로 보내기 (메모리 관리)

웹 응용 프로그램에서 두 작업 (두 텍스트 파일을 파일 스트림으로 가져 오는 작업)간에 빠르게 전환하면 "이 파일이 다른 프로세스에서 사용 중입니다"라는 오류가 나타납니다. 나는 더 많은 코드를 정리하고 가능한 한 빨리 파일 스트림을 삭제 했으므로이 오류를 더 이상 재현 할 수 없다.

한 명의 사용자가 사이트를 사용하고 있다면 좋겠지 만 수천 명의 잠재 고객이있는 경우 큰 문제가되는 것으로 확인됩니다.

내 질문 : 교통량이 많은 상황에서 어떻게 이런 일이 발생하지 않도록 할 수 있습니까?

나는 어리 석고 비현실적인 소리가 들리더라도 아이디어를 뱉어 내고있다. 나는 이런 생각으로이 아이디어를 선택하지 않았기 때문에 여기에서 조언을 구하는 이유가 있습니다.

  • 여러 개의 텍스트 파일을 갖는 하나의 사용
  • 요청에 따라 파일의 복사본을 생성하고 작업이
  • 는 DB에 데이터를 이동 완료 후 치우는에있을 때 다음으로 이동

나는 DB 접근법을 시도했지만 많은 양의 데이터가 있기 때문에 모든 데이터를 메모리에 저장하는 데 3-4 초가 걸린다는 것을 알게되었습니다. 파일 스트림은 1 초도 걸리지 않습니다.

+1

왜이 파일의 내용을 포함하는 정적 클래스가 없으므로 한 번에 읽을 필요가 없습니다. 그런 다음, 그 클래스는 애플 리케이션 수영장 doesnt 재설정으로 모든 사람에게 사용할 수 있습니까? – Tommy

+0

@ 토미 내가 사용하는 두 개의 다른 파일에 그 기능이 있지만 몇 가지 방법을 결코 그 표 적용 영역에 적용 할 생각 * 얼굴 손바닥 * 당신 선생님, 그냥 처리 시간의 톤을 저장 : – Adrian

+0

하하 - 내가 싫어 때 내 프로젝트에서 그렇게해라.이 인스턴스에서 귀하의 질문에 더 잘 답변한다고 생각하시면 답변을 게시 할 수 있습니다. – Tommy

답변

0

이 데이터 소리 때문에 같은 그것은 주로 읽기 전용 응용 프로그램의 모든 사용자가, 당신은 데이터를 저장하는 정적 클래스를 만들 수 걸쳐. 이렇게하면 한 번에 데이터를 읽는 것만으로 응용 프로그램 풀이 재설정 될 때까지 응용 프로그램의 모든 사용자가 사용할 수 있습니다. 정적 클래스와 생성자를 사용하면 모든 사용자가 데이터에 액세스 할 수있는 기능으로 단일 읽기를 수행 할 수 있어야합니다.

public static class Tabulardata{ 

     private readonly object Data;   

     static TabularData(){ 
      Data = //read and process file data 
     } 
} 
1

파일을 읽는 경우 인수를 FileStream 생성자에 전달하면 여러 프로세스에서 파일을 쉽게 읽을 수 있습니다.

다음 FileStream 생성자는 기존 파일을 열고 다른 사용자에게 읽기 전용 액세스 권한을 부여합니다 (읽기).

FileStream fileStream = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read); 

이 열거 형은 일반적으로 두 프로세스가 동일한 파일에서 동시에 읽을 수 있는지 여부를 정의하는 데 사용됩니다. 예를 들어 파일을 열고 읽기를 지정한 경우 다른 사용자가 파일을 읽기 용으로 열 수는 있지만 쓰기 용으로 열 수 없습니다.

http://msdn.microsoft.com/en-us/library/system.io.fileshare%28v=vs.110%29.aspx

+0

알기 아주 좋습니다. :) – Adrian