Я нашел пример асинхронного использования XmlWriter в MSDN документации http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspxXmlWriter метода асинхронной
async Task TestWriter(Stream stream)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Async = true;
using (XmlWriter writer = XmlWriter.Create(stream, settings)) {
await writer.WriteStartElementAsync("pf", "root", "http://ns");
await writer.WriteStartElementAsync(null, "sub", null);
await writer.WriteAttributeStringAsync(null, "att", null, "val");
await writer.WriteStringAsync("text");
await writer.WriteEndElementAsync();
await writer.WriteProcessingInstructionAsync("pName", "pValue");
await writer.WriteCommentAsync("cValue");
await writer.WriteCDataAsync("cdata value");
await writer.WriteEndElementAsync();
await writer.FlushAsync();
}
}
Все, что я знаю о потоках и асинхронном программировании сказал мне, что это слишком медленный код и использовать синхронные методы Write будет намного быстрее. Я изменил этот код и протестировал его. Я обнаружил, что я прав и синхронный код быстрее в 3-4 раза на файлы более 100 МБ и более чем в 8-10 раз быстрее на файлы размером менее 10 МБ на моем env.
Итак, мой вопрос в том, есть ли какой-либо сценарий, когда такой код можно использовать и обеспечивает разумную прибыль от производительности?
Вот мой тестовый код на pastebin http://pastebin.com/67EfUbPN –
Как я подозревал, вы не открываете поток файлов асинхронно. См. [Документы MSDN (параграфы первой пары в разделе Примечания)] (http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx) для получения дополнительной информации. –
Даже если я использую FileOptions.Asynchronous, как этот Stream str = File.Create (FILE_NAME_A, 6140, FileOptions.Asynchronous); он становится только медленнее на 5-10% –