Ich habe den folgenden Code, der eine (normalerweise lokale: 127.0.0.1:8080) XML-Datei abhören und in eine Klasse deserialisieren soll Objekt.Schnellste/geringste ressourcenintensive Möglichkeit zum Deserialisieren von XML aus einer URL bei Verwendung in einer Schleife
private void deserializer()
{
internal XmlSerializer serializer = new XmlSerializer(typeof(myAPI));
EventWaitHandle MyEventWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
while (!Global.IsShuttingDown)
{
MyEventWaitHandle.WaitOne(10);
XmlReader reader = XmlReader.Create("http://" + apiAddress + ":" + apiPort + "/api");
apiData = (myAPI)serializer.Deserialize(reader);
updateChannelData();
}
}
Dies funktioniert, aber aufgrund der Geschwindigkeit, mit der ich Datenpool kann ein bisschen mehr von einer Belastung für die Maschine als Ich mag würde.
Die API ist in Stein, so dass ich nicht UDP oder COM oder etwas ähnliches, nur XML von einer lokalen URL verwenden kann.
Gibt es einen effektiveren Weg, dies zu tun? Auch die XmlReader
hat keine Option, die String-Antwort zu speichern, so dass ich es für Änderungen vergleichen kann, so dass möglicherweise updateChannelData()
überspringen, wenn keine Änderungen erkannt werden, was kann ich tun, ist leicht, diese Implementierung hinzuzufügen?
@ChibuezeOpata 'XmlSerializer', wird Code modifizieren, um sie definiert ist. – Wobbles
Haben Sie versucht [Protobuf] (http://maxondev.com/serialization-performance-comparison-c-net-formats-frameworks-xmldatacontractserializer-xmlserializer-binaryformatter-json-newtonsoft-servicestack-text/)? –
@ChibuezeOpata "Die API ist fest in Stein, so dass ich nicht UDP oder COM oder etwas ähnliches, nur XML von einer lokalen URL verwenden kann." – Wobbles