Если вы принимаете P / Invoke, есть лучший способ, который более документирован, чем NtQueryInformationProcess: PROCESSENTRY32 (CreateToolhelp32Snapshot, Process32First, Process32Next). Это показано в этом сообщении .
Обратите внимание на тонкие детали и обратите внимание, что родительский PID не обязательно является идентификатором создателя, на самом деле это может быть совершенно не связанным, о чем сообщают комментарии сообщества в ] PROCESSENTRY32 .
Это зависит от сценария. XmlSerializer
, конечно, один путь и имеет преимущество отображения непосредственно на объектную модель. В.NET 3.5, XDocument
, и т.д. являются также очень дружественными. Если размер является очень большим, то XmlWriter
Ваш друг.
Для XDocument
пример:
Console.WriteLine(
new XElement("Foo",
new XAttribute("Bar", "some & value"),
new XElement("Nested", "data")));
Или то же с XmlDocument
:
XmlDocument doc = new XmlDocument();
XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo"));
el.SetAttribute("Bar", "some & value");
el.AppendChild(doc.CreateElement("Nested")).InnerText = "data";
Console.WriteLine(doc.OuterXml);
, Если Вы пишете большой поток данных, тогда любой из подходов DOM (такой как XmlDocument
/ XDocument
, и т.д.) быстро возьмет большую память. Таким образом, если Вы пишете 100 XML-файл МБ от [1 116] CSV, Вы могли бы рассмотреть XmlWriter
; это более примитивно (неперезаписываемый пожарный шланг), но очень эффективно (вообразите большой цикл здесь):
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();
Наконец, через [1 112]:
[Serializable]
public class Foo
{
[XmlAttribute]
public string Bar { get; set; }
public string Nested { get; set; }
}
...
Foo foo = new Foo
{
Bar = "some & value",
Nested = "data"
};
new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo);
Это - хорошая модель для отображения на классы и т.д.; однако, это могло бы быть излишество при выполнении чего-то простого (или если желаемый XML действительно не имеет прямой корреляции к объектной модели). Другая проблема с [1 113] - то, что этому не нравится сериализировать неизменные типы: все должно иметь общедоступного метода get и метод set (если Вы не делаете все это сами путем реализации IXmlSerializable
, в этом случае Вы не получили много при помощи [1 115]).
Я дал бы XLINQ (чтение: LINQ к XML) попытка. Это легко, интуитивно и легко доступно для редактирования.
XmlWriter является самым быстрым способом записать хороший XML. XDocument, XMLDocument и работы некоторых других, хорошие также, но, не оптимизированы для записи XML. Если Вы хотите записать XML максимально быстро, необходимо определенно использовать XmlWriter.
Также проверьте Mark S. Rasmussen XmlDocument быстрый интерфейс , который действительно обеспечивает легкий вводить/читать вывод XML.
В прошлом я создал свою XML-схему, затем использовал инструмент для генерации классов C#, которые сериализируют к той схеме. Инструмент определения схемы XML является одним примером
http://msdn.microsoft.com/en-us/library/x6c1kb0s (По сравнению с 71) .aspx
Для простых случаев я также предложил бы смотреть XmlOutput быстрый интерфейс для создания Xml.
XmlOutput является большим для простого создания Xml с читаемым и удобным в сопровождении кодом при генерации допустимого Xml. сообщение orginal имеет некоторые яркие примеры.
Для простых вещей я просто использую XmlDocument/XmlNode/XmlAttribute классы и XmlDocument DOM, найденный в System.XML.
Это генерирует XML для меня, я просто должен соединить несколько объектов.
Однако на больших вещах, я использую сериализацию XML.
Как выше.
я использую stringbuilder.append ().
Очень простой, и можно тогда сделать xmldocument.load (strinbuilder объект как параметр).
Вы будете, вероятно, использовать string.concat в добавлять параметре, но это - очень простой подход.
Лучшее, что я пробовал, - это LINQ to XSD ( что неизвестно большинству разработчиков). Вы даете ему схему XSD, и он генерирует идеально сопоставленную полную строго типизированную объектную модель (на основе LINQ to XML) для вас в фоновом режиме, с которой действительно легко работать - и он обновляет и проверяет вашу объектную модель и XML в в реальном времени. Хотя это все еще «Предварительный просмотр», я не обнаружил в нем никаких ошибок.
Если у вас есть схема XSD, которая выглядит так:
<xs:element name="RootElement">
<xs:complexType>
<xs:sequence>
<xs:element name="Element1" type="xs:string" />
<xs:element name="Element2" type="xs:string" />
</xs:sequence>
<xs:attribute name="Attribute1" type="xs:integer" use="optional" />
<xs:attribute name="Attribute2" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
Тогда вы можете просто создать XML следующим образом:
RootElement rootElement = new RootElement;
rootElement.Element1 = "Element1";
rootElement.Element2 = "Element2";
rootElement.Attribute1 = 5;
rootElement.Attribute2 = true;
Или просто загрузить XML из файла, например:
RootElement rootElement = RootElement.Load(filePath);
Или сохраните его так:
rootElement.Save(string);
rootElement.Save(textWriter);
rootElement.Save(xmlWriter);
rootElement.Untyped
также возвращает элемент в форме XElement (из LINQ в XML).
new XElement("Foo",
from s in nameValuePairList
select
new XElement("Bar",
new XAttribute("SomeAttr", "SomeAttrValue"),
new XElement("Name", s.Name),
new XElement("Value", s.Value)
)
);
:set relativenumber
для наблюдения чисел как расстояние от строки идет курсор! (Vim 7.3 +) – Michael Berkowski 6 November 2011 в 13:44