Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > как НЕ читать дважды данные из файла?


Автор: Экскалупатор 19.9.2009, 11:10
Есть такая ситуация, у меня есть две формы, и эти обе формы должны работать с одними и теми же данными, хранящимися в файле XML. у меня есть класс который читает эти данные, и получается что мне нужно в каждой форме сделать экземпляр класса, читающего нужные мне данные, получается что выполняется ненужная работа. подскажите как этого избежать. у меня есть предположение, что нужно сделать класс хранящий результаты чтения XML файла, и кидать потом этот класс между формами. но может есть какой то иной способ? меня именно логика этого процесса интересует. заранее всем спасибо.

Автор: Akina 19.9.2009, 11:34
Цитата(Экскалупатор @  19.9.2009,  12:10 Найти цитируемый пост)
мне нужно в каждой форме сделать экземпляр класса

А вот это-то зачем? сделай класс на уровне приложения и грузи его на старте. А обе формы пусть обращаются к этому одному экземпляру, уже загруженному на старте. А проверить, есть в памяти нужные данные или их надо подчитать с диска - это уже сабота самогО класса.

Автор: Skynin 19.9.2009, 18:47
Общие рассуждения:

1. Операционная система вполне хорошо кеширует операции чтения-записи файлов. Поэтому чем ближе повторное чтение, тем вероятней что файл еще в памяти. Если на общую скорость выполнения "чтение" и инициализация на основе этих данных каких-либо объектов - влияние мизерное - то и незачем усложнять код, читай повторно.

2. Если файл большой (вряд ли ОСь будет держать его в памяти после первого чтения) или парсинг файла долгий - можно кешировать результаты первого парсинга самому. 

3. Если результаты парсинга нужны только при начале работы системы и/или занимают много места, то имеет смысл при первом парсинге запомнить уже проинициализированный объект, а потом его(или на его основе) клонировать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)