Un utilisateur publie cet article à propos de how to use HttpResponse.Filter to compress large amounts of data. Mais qu'arrivera-t-il si j'essaie de transférer un fichier 4G? chargera-t-il le fichier entier en mémoire pour le compresser? ou sinon il va le compresser morceau par morceau?Will HttpResponse.Filter tampon toutes les données avant de commencer l'envoi?
Je veux dire, je fais ce moment:
public void GetFile(HttpResponse response)
{
String fileName = "example.iso";
response.ClearHeaders();
response.ClearContent();
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
response.AppendHeader("Content-Length", new FileInfo(fileName).Length.ToString());
using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), fileName), FileMode.Open))
using (DeflateStream ds = new DeflateStream(fs,CompressionMode.Compress))
{
Byte[] buffer = new Byte[4096];
Int32 readed = 0;
while ((readed = ds.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, readed);
response.Flush();
}
}
}
Donc, en même temps, je lis, je suis la compression et l'envoyer. Ensuite, je veux savoir si HttpResponse.Filter fait la même chose, sinon il chargera tout le fichier en mémoire afin de le compresser.
En outre, je suis un peu peu sûr à ce sujet ... peut-être est nécessaire de charger le fichier entier en mémoire pour le compresser ... est-ce?
Cheers.
Je sais que je peux écrire en morceaux, mais ma question est ... va-t-elle l'envoyer aussi morceau par morceau? ou sinon va-t-il attendre que tout le flux soit chargé pour le compresser et ensuite l'envoyer? – vtortola
Ensuite, ce ne sera pas un «flux». La réponse est diffusée vers la destination lorsque vous écrivez dans le flux de réponses. Il ne sera conservé en mémoire que lorsqu'il sera envoyé sur le réseau. Déflate flux ne lira pas le fichier entier car il utilise FileStream pour lire à partir du fichier en morceaux (4096 octets). – ata
merci beaucoup! :) – vtortola