2016-08-09 6 views
1

StreamResponse()를 사용할 때 NancyFx에 스트림이 배치되어 있습니까?NancyFx : StreamResponse()를 사용할 때 스트림이 삭제됩니까?

streamWriter를 사용하여 스트림에 쓸 때 보내려는 스트림을 닫지 않고 처리 할 수 ​​없습니다. 그리고 내가 그것을 보는 방식으로, 나는 효과적으로 반환에서 메서드를 남겨 뒀기 때문에 수동으로 스트림을 처리 할 수 ​​없습니다.

이 코드는 작동합니다

// Open a stream and write to it with streamReader 
Stream memStream = new MemoryStream(); 
StreamWriter memWriter = new StreamWriter(memStream, Encoding.UTF8); 
memWriter.Write(someStringText); 
memWriter.Flush(); 
memStream.Position = 0; 

// Add stream to the respose which should get downloaded 
var response = new StreamResponse(() => memStream, MimeTypes.GetMimeType(contentType)); 
return response.AsAttachment(someFileName); 

내가 가비지 컬렉터 때까지 남아있는 스트림이 함께 제공에 대해 걱정할 필요하거나이 StreamResponse 올바르게 배치합니까합니까?

+0

해당 클래스가 IDisposable을 구현하는 경우 완료하면 처리해야합니다. –

답변

1

StreamResponse.cs에 따르면 StreamResponse.Dispose()Func<Stream>이 반환 한 스트림을 삭제합니다.

기본 스트림에 영향을주지 않고 StreamWriter을 삭제하는 방법은 this answer을 참조하십시오.

+0

그리고 streamWriter는 가비지 수집기에서 안전하게 관리 할 수 ​​있습니까? 스트림을 닫지 않고 처리 할 수있는 방법이 없습니다. – Bingla

+0

@Bingla 편집을 참조하십시오. –

+0

StreamResponse.Dispose()가 언제 호출됩니까? Nancy가 처리 했습니까? 아니면 명시 적으로 호출해야합니까? – Mac