2009-12-29 4 views
2

Juste en regardant les différentes façons de ftp'ing un fichier en C#. J'ai remarqué quelques exemples font:Pourquoi diffuser un fichier plutôt que de l'envoyer immédiatement?

streamReader.ReadToEnd() 

ensuite convertir en octets, puis envoyer le fichier en une seule fois.

tandis que d'autres font un:

while (contentLength != 0) 
    stream.write(buff, 0, contentLength); 
    contentLength = fileStream.Read(buff, 0, buffLength); 

envoie le fichier 2048 à la fois pour des fichiers plus volumineux, tandis que l'autre méthode est très bien pour les fichiers de la gamme 10-50K?

+0

Utilisez une bibliothèque pour cela. –

Répondre

1

Si vous ne pouvez lire ou écrire le fichier qu'en une seule fois, vous devez allouer autant d'espace que nécessaire pour l'ensemble du fichier. Cela peut être lourd, surtout si vous ne savez pas quelle sera la taille du fichier à l'avance. Il est également mauvais pour les connexions plus lentes, car vous ne pourrez pas utiliser aucun du fichier jusqu'à ce que tout soit fini, ce qui est évidemment terrible pour des applications comme le streaming de films ou d'audio. Buffering est une bonne stratégie générale pour gérer ce genre de cas.

1

Cela dépend vraiment de la taille des fichiers du système que vous concevez. Si vous avez des fichiers très volumineux, le fichier entier doit être conservé dans la mémoire tampon et la mémoire des serveurs s'épuise rapidement si vous ne coupez pas le fichier en plusieurs parties lors de la diffusion.

0

Si vous avez des fichiers volumineux, il vaut mieux ne pas forcer la mémoire avec le gros get, mais plutôt le décomposer en morceaux.

0

Le second code qui utilise un tampon plus petit 2K va presque toujours être mieux en termes de mémoire, et en termes de temps sera probablement une différence insignifiante:

http://en.wikipedia.org/wiki/Space-time_tradeoff

En outre, votre Le code utilise une boucle while avec deux lignes indentées, mais la deuxième ligne ne fait pas réellement partie de la boucle car elle n'est pas entourée d'accolades.

Questions connexes