Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь в оптимизации процедуры, по работе с сис. реестром на КПК 
V
    Опции темы
Fedia
Дата 9.8.2006, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: нет
Всего: 13



Я написал процедуру поиска и удаления подраздела сис. реестра на КПК, содержащего определенный "параметр" = "значению". Только,  скорее всего она жутко не оптимально написана, т.к. поиск данных в подразделе, содержащем ~ 130 др. подразделов у нее занимает около 20 секунд. Прошу помочь оптимизировать эту процедуру.
Код

        public void FindAndDelSubKey(string SubKeyStart, string SubKey,
            string ValueNames, string Value)
        {
            RegistryKey RegKey = OpenNETCF.Win32.Registry.ClassesRoot;
            RegKey = RegKey.OpenSubKey(SubKeyStart);        
            string[] ArS = RegKey.GetSubKeyNames();
            int i;
            for (i = RegKey.SubKeyCount-1; i > -1; i--)
            {
                if (ArS[i] == SubKey)
                {
                    RegistryKey RegSubKey = OpenNETCF.Win32.Registry.ClassesRoot;
                    RegSubKey = RegSubKey.OpenSubKey(SubKeyStart + "\\" + SubKey);

                    bool close = false;
                    if (RegSubKey.GetValue(ValueNames) is String)
                    {
                        string s = (String)RegSubKey.GetValue(ValueNames);
                        if (s == Value) 
                        {
                            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                            DialogResult result;
                            result = System.Windows.Forms.MessageBox.Show("Удалить: " + SubKeyStart + "\\" + SubKey, 
                                "Удаление подраздела", buttons, MessageBoxIcon.Question,
                                MessageBoxDefaultButton.Button1);
                            if (result == DialogResult.Yes)
                            {
                                close = true;
                                RegSubKey.Close();
                                RegKey.DeleteSubKey(SubKey);
                            }
                        }
                    }
                    if (!close)
                    RegSubKey.Close();
                } 
                else
                    FindAndDelSubKey(SubKeyStart + "\\" + RegKey.GetSubKeyNames()[i],
                        SubKey, ValueNames, Value);
            }
            RegKey.Close();
        }




--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
mr.DUDA
Дата 9.8.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Можно закомментарить всё что внутри if(ArS[i] == SubKey), тогда будет хотя бы понятно, тормозит ли уже когда нашло ключ, либо до того (в GetSubKeyNames).


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 9.8.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Нашел что тормозит процесс smile 
Цитата(Fedia @  9.8.2006,  05:18 Найти цитируемый пост)
RegKey.GetSubKeyNames()[i]

Зачем повторно искать имя ключа, если они есть у тебя в массиве ArS smile 
Все стало работать намноооооооооого быстрее
P.S. Я бы заменил еще 
Цитата(Fedia @  9.8.2006,  05:18 Найти цитируемый пост)
RegSubKey = RegSubKey.OpenSubKey(SubKeyStart + "\\" + SubKey);

На RegSubKey = RegKey.OpenSubKey(SubKey);
Правда существенной прибавки производительности не заметил  smile 
PM MAIL WWW ICQ   Вверх
Fedia
Дата 9.8.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: нет
Всего: 13



Цитата(ivashkanet @  9.8.2006,  10:50 Найти цитируемый пост)
Нашел что тормозит процесс  
Цитата(Fedia @  9.8.2006,  05:18 )    
RegKey.GetSubKeyNames()[i]

Блииин ! Какой ты молодец ! Точно ведь. Спасибо большое  smile



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ivashkanet
Дата 10.8.2006, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Приходи еще  smile 
Цитата(Fedia @  9.8.2006,  22:57 Найти цитируемый пост)
 Какой ты молодец !

 smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.