Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 02:34   #1
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию XML создание библиотеки

Цель создать "библиотеку" типа:
для слова ааа будет выглядеть
Код:
<root>
   <a>
     <a>
       <a>
         aaa
       </a>
     </a>
   </a>
</root>
Все работает как нужно, но время создания.... 100 тыс слов ...3 часа..., а нужно 10 000 000 =)) (может есть идейки как оптимизировать=))

Основной класс:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;

namespace CreationLib_test3
{
    public class myClass
    {
        public myClass()
        {
            CreationWords CW = new CreationWords();
            string path = "Library3.lib";
            Console.WriteLine("Открытие библиотеки {0}", path);

            XmlDocument document = new XmlDocument();

            bool pLoad = false;

            try
            {
                document.Load(path);
                Console.WriteLine("Библиотека открыта.");
            }
            catch
            {
                Console.WriteLine("Не смогли открыть...");
                using (StreamWriter sw = File.CreateText(path))
                {
                    sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                    sw.WriteLine("<words>");
                    sw.WriteLine("</words>");
                }
                Console.WriteLine("Создали новую...");          
                document.Load(path);
                Console.WriteLine("Открытие...");
            }

            XmlNode root = document.DocumentElement;

            Console.WriteLine("Создание библиотеки...");
            DateTime startTime = DateTime.Now;
            #region create
            for (int y = 0; y < 100000; y++)
            {
                string s = CW.World();
                //Console.WriteLine("Слово для добавления: {0}", s);
                string code = "//words";//root структура
                for (int i = 0; i < s.Length; i++)
                {
                    code += "/" + s[i];
                }

                XmlNode node = root.SelectSingleNode(code);
                XmlText ss = document.CreateTextNode(s);
                int index = 0;
                if (node == null)
                {
                    code = code.Remove(code.Length - 1 - 1); //вместо одного можно возвращать маску длинны на эту букву + "/" (1)
                    index = 1;
                    node = root.SelectSingleNode(code);

//--------------------
//Вот это тяжелое место... возможно я изобретаю велосипед....
                    while (true)
                    {
                        if (node != null && code.Length >= 5)
                        {
                            //Console.WriteLine("По Вашему запросу найдена структура: {0} | index={1}", code, index.ToString());
                            break;
                        }
                        //Console.WriteLine("Ищем по древу структуру: {0}", code);
                        code = code.Remove(code.Length - 1 - 1);
                        node = root.SelectSingleNode(code);
                        index += 1;
                    }
//--------------------

                    //Console.WriteLine("Находимся в структуре: {0}", code);

                    if (node != null)
                    {
                        //Console.WriteLine("Достраиваем структуру (index={0} root={1}):", index, code);
                        //Достраиваем структуру
                        for (int i = index; i > 0; i--)
                        {
                            //Console.WriteLine("CreateElement: {0}", s[s.Length - i].ToString());
                            XmlElement newNode = document.CreateElement(s[s.Length - i].ToString());
                            node = node.InsertAfter(newNode, node.LastChild);
                        }
                        //Добовляем текст(структуру текста)
                        //Console.WriteLine("Добовляем текст: {0}", s);
                        XmlText newText = document.CreateTextNode(s);
                        node.InsertAfter(newText, node.LastChild);

                    }
                }
                else
                {
                    //Если нашли такую структуру
                    //Console.WriteLine("Такая структура с таким словом уже есть");
                }
            }
            #endregion

            Console.WriteLine("Библиотека создана.");
            Console.WriteLine("Время создание библиотеки: {0}", (DateTime.Now - startTime).ToString());
            document.Save(path);
        }
    }
}

Последний раз редактировалось dampirik; 21.11.2010 в 02:39.
dampirik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание библиотеки, работающей с видео потоком с USB Webcam kopanda Общие вопросы C/C++ 3 18.11.2010 17:18
Создание библиотеки bigory Visual C++ 18 21.09.2010 01:17
Создание и вызов библиотеки dll DM_bite Помощь студентам 3 15.06.2010 12:47
Создание библиотеки *.LIB в С++ creator32 Помощь студентам 0 14.12.2009 20:26