Вопрос

Мне нужен совет.У меня есть приложение, которое импортирует 10 000 строк, содержащих имя и адрес, из текстового файла в XElements, которые впоследствии добавляются в синхронизированную очередь.Когда импорт завершен, приложение создает рабочие потоки, которые обрабатывают XElements, выводя их из очереди, делая вызов базы данных, вставляя выходные данные базы данных в документ запроса и вставляя обработанный документ в очередь вывода.Когда все запросы обработаны, очередь вывода записывается на диск в виде XML-документа.

Я использовал XElements для запросов, потому что мне нужна была гибкость для добавления полей в запрос во время обработки.то естьВ зависимости от типа задания приложение может потребовать добавить в запрос номер телефона, дату рождения или адрес электронной почты на основе совпадения имени/адреса с общедоступной базой данных записей.

Мои вопросы:Кажется, что XElements используют довольно много памяти, и я знаю, что приходится много анализировать, пока документ проходит через методы обработки.Я подумываю о замене XElements объектом Dictionary, но сомневаюсь, что результат будет стоить затраченных усилий.По сути, это приведет к тому же самому.

Мысли?

Это было полезно?

Решение

То есть вы на самом деле не используете XML как таковой?Ты просто используешь XElement как набор пар имя/значение?Если да, то я бы определенно воспользовался словарем.Я ожидаю, что ваш код также потенциально станет чище.

С другой стороны, если вы действительно используете XML, вы, вероятно, захотите придерживаться XElement.

У вас действительно есть проблема?Вы говорите, что это занимает довольно много памяти. У вас есть? достаточно Память?Можете ли вы купить больше памяти?Это почти наверняка будет дешевле, чем потратить даже несколько часов на рефакторинг, если только ради экономии памяти.(Похоже, что это приложение запускается только на одном компьютере — я могу ошибаться.Чем шире он используется, тем больше, вероятно, имеет смысл потратить некоторое время на его оптимизацию.)

РЕДАКТИРОВАТЬ:Ладно, покупать больше памяти нецелесообразно.Тем не менее, у вас действительно есть проблема?Каково влияние этого, возможно, на использование большего количества памяти, чем нужно?Что это Действительно обходится вам?

Другие советы

Использование LINQ может иметь смысл, если вам не придется сохранять все дерево перед его использованием.

Я бы хотел выполнить как можно больше обработки при построении запроса из каждой строки.

Затем вы берете результаты запроса и обрабатываете их, сохраняя результат в базе данных.

Это уменьшит проблемы с памятью, поскольку каждая строка считывается только при необходимости, а затем обрабатывается и сохраняется.

Вы можете найти это полезным: http://www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

Возьмите результаты вашего запроса, выполните цикл for для каждого клиента и сохраните запись:

var query =
        from c in
            (from line in File.ReadAllLines(filePath)
             let customerRecord = line.Split(',')
             select new Customer()
                 {
                     Firstname = customerRecord[0],
                     Lastname = customerRecord[1],
                     PhoneNumber = customerRecord[2],
                     City = customerRecord[3],
                     Country = customerRecord[4]
                 })
        where c.Country == "UK"
        select c;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top