J'ai un 1GB dans le serveur A, je dois utiliser la méthode Read()
pour l'obtenir en local. Il est divisé en paquets (paquet 16517). Chaque paquet contient un en-tête de 65536 octets.Meilleur moyen d'écrire un octet [] dans un fichier binaire
Actuellement, j'utilise BinaryWriter
pour écrire chaque paquet dans un fichier directement. Mais cela m'a pris plus de 5 minutes (323642 ms).
Je tente de joindre certains paquets en byte[]
de 10 Mo, mais cela ne réduit pas le temps (317397 ms).
Quelle est la meilleure façon d'écrire byte[]
dans un fichier binaire?
Mise à jour
const ulong Memory_10MB = 10485760; // 10MB
do {
byte[] packetData = Read(&totalSize, /*Other parameters*/ ,&hasFollowing);
if (package == null) {
// Process error
return;
}
dataSize += (ulong)packetData.Length;
if (dataSize >= Memory_10MB)
{
if (binaryWriter == null)
{
path = Path.GetTempFileName();
fileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read);
binaryWriter = new BinaryWriter(fileStream);
if (responseData.Length > 5)
{
binaryWriter.Write(responseData.Skip(5).ToArray());
}
}
binaryWriter.Write(packetData);
}
else
{
responseData = Utilities.ConcatArrays(responseData, packetData);
}
} while (dataSize < totalSize);
// Process after got data
Si vous copiez simplement le fichier en utilisant Windows Explorer, combien de temps cela prend-il? Quoi que ce soit je ne m'attendrais pas à ce que tu puisses l'améliorer beaucoup. –
Comment écrivez-vous les données? S'il vous plaît poster votre code. –
Tout d'abord, mon fichier de sortie se trouve sous le dossier 'Temp'. Je le copie dans un autre lecteur. Cela prend environ 3 secondes – GSP