XML как виртуальный реестр замедляет работу приложения - PullRequest
4 голосов
/ 12 февраля 2011

Я создаю продукт "Application Virtualization". Я использую XML-файл в качестве виртуального реестра. Виртуальные приложения, созданные из моего программного обеспечения, получают доступ к виртуальному реестру Xml. Он работает, однако работает очень медленно.

Я загружаю и выгружаю XML при каждом вызове API-интерфейса реестра, поскольку несколько процессов, связанных с родительским доступом, получают доступ к одному и тому же файлу реестра Это может привести к замедлению работы приложения.

Может кто-нибудь дать мне знать альтернативу XML ...

Ответы [ 4 ]

1 голос
/ 14 февраля 2011

Вместо этого вы можете использовать базу данных. Это было бы быстрее. Sqlite легкий и мощный.

0 голосов
/ 17 февраля 2011

Ну, конечно, вы всегда можете использовать реальный реестр, который является поточно-ориентированным и быстрым ...

В противном случае вам придется создать отдельный процесс, который управляет вашим виртуальным реестром XML, сохраняя структуру XML в памяти, чтобы ему не приходилось все время читать / записывать. Тогда процессы, которым необходим доступ к нему, могут использовать IPC для связи с процессом реестра.

Другая идея, если несколько процессов вряд ли будут постоянно обновлять реестр: сохраняйте виртуальный реестр XML в памяти и записывайте его на диск при изменении, но асинхронно через фоновый поток. При доступе к реестру сначала проверьте, был ли файл изменен; если нет, вам не нужно перезагружать его.

0 голосов
/ 17 февраля 2011

Время преобразования текста в дерево. Я справился с этим в своем коде с помощью Loadaing и парсинга XML во всех процессах, только после того, как в каком-либо из процессов произошла запись.

0 голосов
/ 12 февраля 2011

Если вы загружаете его в память и работаете с ним оттуда, тогда ваша проблема не в XML.Профилируйте свое приложение, чтобы узнать, где оно проводит большую часть своего времени.Я думаю, вы, вероятно, обнаружите, что он тратит большую часть своего времени на поиск предмета, к которому вы хотите получить доступ.

...