2009-07-24 2 views
10

ASP.NET에서 업로드 된 파일을 받으면 일반적으로 HttpPostedFile 개체를 통해 파일을 업로드합니다. 수신 된 데이터는 HttpPostedFile.InputStream을 통해 사용할 수 있습니다. 이 속성을 통해 직접 처리 할 필요가 없다고 믿을 수 있습니다. 그러나 문서에서는 절대로 스트림을 처리하는 사람이 인 것을으로 언급하지 않았으며 ASP.NET 프레임 워크에서 수행 한 경우 인 경우 그것은 그렇게합니다 (말하자면, 나는 세션에 스트림을 저장할 수 있습니까?).누가 HttpPostedFile.InputStream을 폐기해야합니까? - 언제?

이제는 많은 파일을받지 못했고이 특정 스트림을 처리하지 않아도 문제가 발생하지 않았지만 청결 함을 알면 누구나 디자인 계약이 무엇인지 알 수 있습니까?

답변

7

요청에 대한 작업이 완료되면 요청 처리가 완료되면 곧 해제 될 것이라고 말하고 싶습니다. 예를 들어 볼을 공중에 던지면됩니다. 내가 그것을 잡지 않으면 땅에 부딪치게됩니다 ... 그것은 처분됩니다. 내가 그것을 붙잡고 그걸로 뭔가를한다면 ... 그리고 나서 그것을 버리십시오. 다음 요청에서 당신과 놀기 위해 주위를 어슬렁 거리지 않습니다!

세션에 저장하는 문제를 해결하려면 NOOOOOO! 잠시 동안 주위에 있어야 파일 시스템에 기록 할 수 있습니다. 필요할 때 다시 스트림으로 재구성하고 함께 연주하십시오. 세션에서 파일 스트림을 저장하면 (아마도 바이트 배열로?) 세션 (메모리) 리소스의 엄청난 낭비처럼 들립니다.

+0

틀림없이 세션에있는 것을 저장하는 것은 좋지 않은 생각처럼 들리지만, 나는 단지 스트림의 정확한 수명을 아는 것이 관련이있는 예를 찾기 위해 노력했을뿐입니다. 더 좋은 예는 이미지를 처리하고 저장하고 전경에서 웹 요청을 계속하기 위해 백그라운드 작업자를 시작하는 것입니다. 웹 요청은 작업자보다 먼저 완료 될 수 있으므로 스트림이 정확하게 무효화 될 때를 알아야합니다. 어쨌든, 나는 당신이 옳다고 생각합니다. 비록이 문서에서 마이크로 소프트의 더 나은 워드 프로세서를 인정 했었지만 (많은 IDisposable 이슈들과 마찬가지로). –

+0

당신이 그것을 백그라운드 프로세스에 넘기고 싶다면 ... 어느 것이 좋을까요 ... 나는 여전히 파일 시스템에 파일을 저장하고 인스턴스를 전달하는 대신 백그라운드 스레드에 파일에 대한 참조를 전달합니다 스트림의. –

+0

InputStream이 제 통제를 벗어나서 닫히는 것을 감안할 때 분명히 그렇게 할 것입니다. 그러나 일반적으로 병목 현상을 피하기 위해 임시 디스크 액세스는 피하는 것이 더 좋지만 일시적이지만 큰 바이트 배열은 문제가되지 않습니다. 어쨌든 정보 주셔서 감사합니다! –