Friday 24 February 2017

C # Gleitende Mittlere Warteschlange

Wenn Leistung dieses Codes kritisch ist, dann könnte es sinnvoll sein, Heapzuweisungen für Kerzen zu vermeiden. Ich denke, die vernünftigste Art, dies zu tun, wäre, Candle zu einer Struktur zu machen. Obwohl veränderliche Werttypen sind böse. So würde ich auch Refactor Kerze unveränderlich sein. Dies bedeutet auch, dass sich die Implementierung von newestCandle ändern müsste, wahrscheinlich in ein Paar von Doppelfeldern (oder alternativ eine separate veränderliche und rücksetzbare Klasse). Ich sehe keine andere potenzielle Leistungsproblem in Ihrem Code. Aber wenn es um die Leistung geht, sollten Sie sich immer auf Profiling, nicht Ihre (oder jemand elses) Intuition verlassen. Auch ich mag nicht einige Namen Ihrer Methoden. Speziell: ValueUpdated. Methodennamen sollten in der Regel in der Form etwas tun, nicht etwas passiert. Also ich denke, ein besserer Name wäre UpdateValue. Hinzufügen. Ändern. Dies sind die beiden grundlegenden Operationen Ihres MovingAverage und ich denke, dass diese Namen nicht ausdrücken die Bedeutung gut. Ich würde sie so etwas wie MoveAndSetCurrent und SetCurrent nennen. beziehungsweise. Obwohl eine solche Benennung darauf hinweist, dass die grundlegenden Operationen eher Move und SetCurrent sein sollen. Ich habe eine Datenmenge von 4000 Daten und tring, um den gleitenden Durchschnitt für alle Datenwerte zu berechnen, aber da der gleitende Durchschnitt auf vorherigen Daten basiert und ich nicht berechnen kann Die 15 Tage SMA für die ersten 14 Tage, überspringen die ersten 14 Tage und berechnen die SMA auf den Rest der Daten. Und es ist zu LINQ verwenden, um zu erreichen. Kann jemand eine Probe geben oder Hinweis, wie man mit LINQ zu berechnen gleitenden Durchschnitt Die Ausgabe für die durchschnittlichen Werte sind alle um 500s Ich wirklich nicht verstehen, wie ist, dass möglich, dass hohe Wert zu bekommen. Verschieben Mittelwertbildner mit Summen-Array: 06072012 562,49 571,72 06082012 565,84 580,32 06112012 568,56 571,17 06122012 569,55 576,16 06132012 570,56 572,16 06142012 570,63 571,53 06152012 571,21 574,13 06182012 572,78 585,78 06192012 573,79 587,41 06202012 574,23 585,74 06212012 574,22 577,67 06222012 575,63 582,10 06252012 576,06 570,77 06262012 576,68 572,03 06272012 576,88 574,50 06.282.012 576,7 569,05 06.292.012 576,95 584,00 578,37 592,52 07.022.012 07.032.012 579,92 599,41 581,74 599,41 07.032.012 Herausgegeben von Leemx Freitag, 16. November 2012 02.59 Gerührt von Lisa Zhu Microsoft Kontingent Personal Montag, 19. November 2012 07.38 Linq (von : Visual C General) Um einen gleitenden Durchschnitt zu erstellen, würde ich zunächst einen Bereich von 0 bis (Länge der Datenliste - Länge der bewegten Periode) und dann für jeden Wert im Bereich erstellen Elemente x bis x 43 Länge der Bewegungsperiode auswählen und den Mittelwert berechnen. in einer schönen LINQ-Anweisung All: Beachten Sie, dass dies nicht sehr effizient ist, da man im Grunde über die Datenliste iterieren für jeden Wert im Bereich .. Hey, schauen Dieses System ermöglicht Unterschriften von mehr als 60 cha Herausgegeben von Arno Brouwer Freitag November 23, 2012 4:42 PM Als Antwort markiert von Alexander Sun Friday, December 07, 2012 4:41 PM Alle Antworten Eine Probe Ihrer LINQ-Anweisung würde helfen. quotPremature Optimierung ist die Wurzel allen evil. quot - Knuth einen gleitenden Durchschnitt zu erstellen, würde ich beginnen mit einem Bereich von 0 bis zu schaffen (Länge der Datenliste - Länge bewegter Zeit), dann für jeden Wert im Bereich von Auswahlelementen x Bis x 43 Länge der Bewegungsperiode und berechnen den Durchschnitt. in einer schönen LINQ-Anweisung All: Beachten Sie, dass dies nicht sehr effizient ist, da man im Grunde über die Datenliste iterieren für jeden Wert im Bereich .. Hey, schauen Dieses System ermöglicht Unterschriften von mehr als 60 cha Herausgegeben von Arno Brouwer Freitag November 23, 2012 4:42 PM Als Antwort markiert von Alexander Sun Freitag, den 07. Dezember 2012 um 04:41 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen Helfen Sie uns, MSDN zu verbessern. Besuchen Sie unsere UserVoice-Seite zum Übermitteln und Abstimmen über Ideen Dev-Center LernressourcenIch habe ein wissenschaftliches Datenlogging-Programm, das ich seit Jahren entwickelt habe. Wir müssen nun etwas Funktionalität hinzufügen, so dass es einen gleitenden Durchschnitt der gesammelten Daten erzeugt. Ich kann eine Warteschlange von myDataClass erstellen, um den Fifo-Puffer zu tun, aber ich frage mich, was der beste Weg, der die Mittelung tut, sein könnte. Wie Sie aus dem folgenden Codebeispiel sehen können, enthält myDataClass verschiedene Datenstrukturen, von denen einige gemittelt werden können, und einige, die nicht (z. B. die Zeichenfolge) sein können. Die Hauptfrage ist, ob es eine einfache Möglichkeit, dies zu erreichen oder muss ich Code zu durchschnittlich jedes Element in myDataClass schreiben oder sollte ich redesign myDataClass Danke. Ich würde eine Klasse quotDataQueue (of MyDataClass) erstellen, die sich selbst dequeue, wenn die Anzahl in der Warteschlange 10 Elemente überschreitet. Auf diese Weise müssen Sie nie um die Anzahl der Artikel in der Warteschlange aus Ihrem Code zu kümmern, wird dies kümmern werden aus der Warteschlange-Klasse Als Antwort markiert von Mike Feng Moderator Mittwoch, 20. Juli 2011 1:56 Tuesday, July 12, 2011 9:40 AM Nach ein wenig mehr Forschung, ich glaube, ich fand die Lösung für Sie. Sie können die CopyTo-Methode verwenden, um die linken Elemente in der Warteschlange in einem Array zu kopieren. Seien Sie sich bewusst, ich habe nicht den Durchschnitt zu berechnen, zeigte ich nur, wie Sie die Basis Ihrer Berechnungen erhalten können, aber das ist nur das Hinzufügen Ihrer eigenen Berechnungen basierend auf Ihrer Geschäftsregel für die. Als Antwort markiert von Mike Feng Moderator Basiert auf meinem Verständnis, Ihre Anforderung ist so etwas wie dies: Dies sind die Daten in der Warteschlange: myDataClass1. Datadbl 2.1 datastr quotsomeString1quot dataarraydbl ein doppeltes Array myDataClass2. Datadr 3.5 datastr quotsomeString2quot dataarraydbl ein doppeltes Array myDataClass10. Datadbl 9.1 datastr quotsomeString10quot dataarraydbl ein doppeltes Array Nun wollen Sie die durchschnittliche Anzahl der datadbl Feild in jedem myDataClass-Objekt zu berechnen, und erhalten Sie die durchschnittliche Anzahl der dataarraydbl Feild. Wenn ja, schlage ich Ihnen vor, die gleiche Sache wie Crazypenie vorgeschlagen: eine neue Klasse namens DataQueue: Ich hoffe, dies wird hilfreich sein, wenn ich etwas falsch verstanden haben, wenden Sie sich bitte lassen Sie mich wissen. Mike Feng MSFT MSDN Community Support Feedback an uns Get oder Request Code Beispiel von Microsoft Bitte denken Sie daran, die Antworten als Antworten markieren, wenn sie helfen, und sie zu markieren, wenn sie keine Hilfe bieten. Als Antwort markiert von Mike Feng Moderator Mittwoch, 20. Juli 2011 15:33 Danke Cor, ich könnte es so machen, aber myDataClass ist eigentlich ziemlich groß und das Protokollierungssystem kann laufen Eine lange Zeit, so ist es effizienter für mich zu Junk-Kopien der Klasse I dont tatsächlich für die Berechnung der Durchschnitt. Warteschlange schien der einfachste Weg, dies zu erreichen. Meine Hauptfrage ist aber, wie durchschnittlich eine Klasse wie diese Ich bekomme das Gefühl, dass ich muss Code schreiben, die es speziell für jeden Datentyp in myDataClass. Öffentliche Klasse myDataClass Nach meinem Verständnis, Ihre Anforderung ist so etwas wie dies: Dies sind die Daten in der Warteschlange: myDataClass1. Datadbl 2.1 datastr quotsomeString1quot dataarraydbl ein doppeltes Array myDataClass2. Datadr 3.5 datastr quotsomeString2quot dataarraydbl ein doppeltes Array myDataClass10. Datadbl 9.1 datastr quotsomeString10quot dataarraydbl ein doppeltes Array Nun wollen Sie die durchschnittliche Anzahl der datadbl Feild in jedem myDataClass-Objekt zu berechnen, und erhalten Sie die durchschnittliche Anzahl der dataarraydbl Feild. Wenn ja, schlage ich Ihnen vor, die gleiche Sache wie Crazypenie vorgeschlagen: eine neue Klasse namens DataQueue: Ich hoffe, dies wird hilfreich sein, wenn ich etwas falsch verstanden haben, wenden Sie sich bitte lassen Sie mich wissen. Mike Feng MSFT MSDN Community Support Feedback an uns Get oder Request Code Beispiel von Microsoft Bitte denken Sie daran, die Antworten als Antworten markieren, wenn sie helfen, und sie zu markieren, wenn sie keine Hilfe bieten. Als Antwort markiert von Mike Feng Moderator Mittwoch, 20. Juli 2011 13:55 Freitag, 15. Juli 2011 03:33


No comments:

Post a Comment