Je veux convertir un fichier image en chaîne. Les oeuvres suivantes:
MemoryStream ms = new MemoryStream(); Image1.Save(ms, ImageFormat.Jpeg); byte[] picture = ms.ToArray(); ssortingng formmattedPic = Convert.ToBase64Ssortingng(picture);
Toutefois, lors de l’enregistrement sur XmlWriter, il faut attendre longtemps avant de l’enregistrer (20 s pour un fichier d’image de 26 ko). Y at-il un moyen d’accélérer cette action?
Merci,
Raks
Il y a trois points où vous effectuez de grandes opérations sans nécessité:
Au lieu. Premier appel Length
et GetBuffer
. Cela vous permet d’opérer directement sur le tampon du stream. (Ne le rincer d’abord cependant).
Ensuite, implémentez vous-même en base 64. C’est relativement simple, car vous prenez des groupes de 3 octets, effectuez un peu de bricolage pour obtenir l’index dans le caractère auquel il sera converti, puis vous affichez ce caractère. A la fin, vous ajoutez des symboles =
fonction du nombre d’octets dans le dernier bloc envoyé ( =
pour un octet restant, ==
pour deux octets restants et aucun s’il n’y a pas de bloc partiel).
Faites ceci en écrivant dans un char buffer (un char []). La taille la plus efficace est une question d’expérimentation, mais je commencerais par 2048 caractères. Une fois le tampon rempli, appelez-le XmlWriter.WriteRaw
, puis recommencez à écrire à l’index 0.
De cette façon, vous effectuez moins d’allocations et vous commencez à imprimer à partir du moment où votre image est chargée dans le stream de mémoire. En règle générale, cela devrait entraîner un meilleur débit.