Оптимизация XML в C#

Вы можете присоединить к ней декартову таблицу, которая будет возвращать все комбинации обоих столбцов.

select 
    distinct
    t1.Col1,
    t2.Col2
from 
    MyTable t1,
    MyTable t2
5
задан Jeff Yates 14 September 2011 в 19:27
поделиться

6 ответов

С XML я знаю только два способа

XMLReader -> передавать большие XML-данные в или использовать объектную модель XML DOM и сразу прочитать весь XML в памяти.

Если XML большой, у нас есть файлы XML размером 80 МБ и выше, чтение XML в память снижает производительность. Не существует реального способа «объединить» два способа работы с XML-документами. Извините.

2
ответ дан 14 December 2019 в 19:23
поделиться

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

    public void ValidateXmlToXsd(string xsdFilePath, string xmlFilePath)
    {
        XmlSchema schema = ValidateXsd(xsdFilePath);
        XmlDocument xmlData = new XmlDocument();
        XmlReaderSettings validationSettings = new XmlReaderSettings();

        validationSettings.Schemas.Add(schema);
        validationSettings.Schemas.Compile();
        validationSettings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema;
        validationSettings.ValidationType = ValidationType.Schema;
        validationSettings.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
        XmlReader xmlFile = XmlReader.Create(xmlFilePath, validationSettings);

        xmlData.Load(xmlFile);
        xmlFile.Close();
    }

    private XmlSchema ValidateXsd(string xsdFilePath)
    {
        StreamReader schemaFile = new StreamReader(xsdFilePath);
        XmlSchema schema = XmlSchema.Read(schemaFile, new ValidationEventHandler(ValidationHandler));
        schema.Compile(new ValidationEventHandler(ValidationHandler));
        schemaFile.Close();
        schemaFile.Dispose();

        return schema;
    }

    private void ValidationHandler(object sender, ValidationEventArgs e)
    {
        throw new XmlSchemaException(e.Message);
    }

Если XML не может проверить, выдается XmlSchemaException .

Что касается LINQ, я лично предпочитаю использовать XDocument по возможности поверх XmlDocument . Ваша цель в некоторой степени субъективна, и, не видя, что именно вы делаете, я не могу сказать, иди этим или иным образом с уверенностью, что это поможет тебе. Вы можете использовать XPath с XDocument . Я должен сказать, что вы должны использовать то, что лучше всего соответствует вашим потребностям. Нет проблем с использованием иногда XPath и LINQ в других случаях. Это действительно зависит от вашего уровня комфорта, а также от масштабируемости и удобочитаемости.

0
ответ дан 14 December 2019 в 19:23
поделиться

Это может показаться глупым.
Но если у вас есть простые запросы, вы можете использовать регулярное выражение для файлов xml. (как они делают grep в unix / linux.)

Прошу прощения, если это не имеет никакого смысла.

1
ответ дан 14 December 2019 в 19:23
поделиться

XmlReader будет использовать меньше памяти, чем XmlDocument, потому что ему не нужно загружать весь XML в память за один раз.

0
ответ дан 14 December 2019 в 19:23
поделиться

Просто подумайте о комментариях JMarsch. Даже если ваш процесс создания XML не обсуждается, рассматривали ли вы БД (или подмножество XML-файлов, действующих как индексы) в качестве посредника? Очевидно, это принесет пользу только в том случае, если файлы XML не обновляются чаще одного или двух раз в день. Думаю, это нужно сравнить с вашим существующим механизмом кэширования.

Я не могу говорить о скорости,

0
ответ дан 14 December 2019 в 19:23
поделиться

Некоторое время назад я наткнулся на этот технический документ, когда пытался выполнить потоковую передачу XML: Потоковая передача XML на основе API с мощностью и функциональными обновлениями FLWOR для работы с XML в памяти, но с использованием доступа LINQ.

Может быть, кому-то это будет интересно.

2
ответ дан 14 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: