2012-05-02 15 views
29

Il seguente codice funziona, ma mi chiedo se lo MemoryStream creato sia stato chiuso correttamente. Come dovrebbe essere eseguito o FileStreamResult gestirlo per me?Con FileStreamResult, come viene chiuso il MemoryStream?

public FileStreamResult DownloadBudgetedRoleOpportunities(
    Guid projectGuid, 
    IEnumerable<Guid> guidRequiredRoles) 
{ 
    var rolebroker = new ProjectRoleBudgetBroker(); 
    var memstream = rolebroker.CreateBudgetedRoleOpportunies(
     projectGuid, 
     guidRequiredRoles); 

    var fsr = new FileStreamResult (memstream, "application/csv") 
       { 
       FileDownloadName = "RoleOpportunities.csv" 
       }; 
    // memstream.Close(); throws exception 
    return fsr; 
} 

risposta

37

Lo FileStreamResult lo farà per voi. In caso di dubbio controlla sempre il codice, perché il codice non mente e poiché ASP.NET MVC è open source è ancora più facile visualizzare il codice.

Una ricerca rapida su Google per FileStreamResult.cs consente di verificare che nel metodo WriteFile lo stream sia disposto correttamente utilizzando l'istruzione using. (No pun intended)

protected override void WriteFile(HttpResponseBase response) { 
    // grab chunks of data and write to the output stream 
    Stream outputStream = response.OutputStream; 
    using (FileStream) { 
     byte[] buffer = new byte[_bufferSize]; 

     while (true) { 
      int bytesRead = FileStream.Read(buffer, 0, _bufferSize); 
      if (bytesRead == 0) { 
       // no more data 
       break; 
      } 

      outputStream.Write(buffer, 0, bytesRead); 
     } 
    } 
} 
2

Si ha accesso al codice sorgente, in modo da poter verificare voi stessi ;-)

protected override void WriteFile(HttpResponseBase response) 
{ 
    Stream outputStream = response.OutputStream; 
    using (this.FileStream) 
    { 
    byte[] buffer = new byte[4096]; 
    while (true) 
    { 
     int count = this.FileStream.Read(buffer, 0, 4096); 
     if (count != 0) 
     outputStream.Write(buffer, 0, count); 
     else 
     break; 
    } 
    } 
} 
Problemi correlati