C # Сохранение / загрузка проблемы скорости Richtext - PullRequest
1 голос
/ 18 апреля 2009

В настоящее время я пытаюсь решить проблему скорости, связанную с загрузкой и сохранением richtext. Вот подробности. В моем приложении у меня есть класс Question, который должен иметь возможность хранить два richtexts. На данный момент эти два richtexts хранятся в классе Question как TextRanges. Что касается сохранения / загрузки, я использую TextRange.Load (Stream, DataFormats) и TextRange.Save (Stream, DataFormats). Все работает ...

Моя проблема в том, что мне нужно 1000+ этих вопросов сохранить / загрузить из файла. Когда я делаю это, сохранение / загрузка файла, содержащего эти вопросы, занимает 20 ~ секунд. И вдобавок ко всему, я хотел бы иметь возможность загружать несколько таких файлов одновременно ... что заставило бы пользователя ждать, возможно, несколько минут. Я уверен, что моя проблема теперь ясна.

Итак, я начал исследовать, почему так долго сохранялось / загружалось файл, и из профилировщика я обнаружил, что 80% времени, затрачиваемого на сохранение / загрузку файла, занимает методы TextRange.Load и TextRange.Save.

Итак, мой вопрос ... У кого-нибудь есть предложения или указания по ускорению сохранения / загрузки моего файла?

Я пытался придумать другой способ сохранить richtext как в классе Question, так и в файле. У меня довольно быстро закончились идеи, но я хотел прийти сюда до того, как уступил. Любая помощь очень ценится. Также дайте мне знать, если мне нужно что-то уточнить. Спасибо!

Ответы [ 2 ]

1 голос
/ 18 апреля 2009

Сколько накладных расходов при каждом вызове Load и Save, есть ли преимущество в том, чтобы вызывать Load один раз для большого диапазона по сравнению со многими разами для малых диапазонов? Сколько раз вы звоните Load, когда загружаете +1000 вопросов? Каждый ли акт вызова Load обновляет RichTextBox или Flow Document где-нибудь? Если нет, что вы делаете с TextRanges, как только вы их загрузили?

Я заметил этот связанный поток и подумал, что предложу предложение: что делать, если вы сохраните байтовые массивы (или потоки памяти) в классе Question вместо TextRange и создадите TextRange только тогда, когда вы на самом деле нужно загрузить данные в RichTextBox (когда откроется окно с вопросом)?

0 голосов
/ 18 апреля 2009

Вы можете посмотреть Threading . Таким образом, вы можете загрузить свои вопросы без блокировки интерфейса. Загрузите первые 100, а когда они закончатся, загрузите еще 100 или около того.

...