Comment convertir une image en chaîne de la manière la plus efficace?

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é:

  1. Obtenir les octets du stream
  2. Conversion en Base64
  3. L’écrire dans XmlWriter.

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.