Лучшие практики для работы со строками производительно в Haskell в основном: Используйте Данные. Строка байтов/Данные. ByteString. Ленивый.
http://hackage.haskell.org/packages/archive/bytestring/latest/doc/html/
До эффективности строковой реализации по умолчанию входит в Haskell, это не. Каждый Char
представляет кодовую точку Unicode, что означает, что требуется по крайней мере 21 бит на Char
.
Начиная с String
всего [Char]
, который является связанным списком Char
, это означает String
, с имеют плохую местность ссылки, и снова означает, что String
с являются довольно большими в памяти, как минимум это N * (21bits + Mbits)
, где N является длиной строки, и M является размером указателя (32, 64, что имеет Вас), и в отличие от многих других мест, где Haskell использует списки, где другие языки могли бы использовать различные структуры (я думаю конкретно о потоке управления здесь), String
, с гораздо менее вероятны, чтобы смочь быть оптимизированными к циклам, и т.д. компилятором.
И в то время как Char
соответствует кодовой точке, отчет о Haskell 98 ничего не указывает о кодировании, используемом при выполнении файла IO, даже значение по умолчанию намного меньше способ изменить ее. На практике GHC обеспечивает расширения, чтобы сделать, например, двоичный IO, но Вы уходите резервирование в той точке так или иначе.
Даже с операциями как предварительное ожидание к передней стороне строки маловероятно, что String
будет биться ByteString
на практике.
Вот что я делаю:
MailMessage mail = new MailMessage(from, to, subject, message);
mail.IsBodyHtml = true;
SmtpClient client = new SmtpClient("localhost");
client.Send(mail);
Обратите внимание, что я установил для html почтового сообщения значение true: mail.IsBodyHtml = true;
Я полагаю, что это было примерно так:
mailObject.IsBodyHtml = true;
Примените правильную кодировку Mailbody.
mail.IsBodyHtml = true;