Ich schreibe eine weiche Echtzeitanwendung in C #. Bestimmte Aufgaben, wie das Beantworten von Hardwareanfragen, die von einem Netzwerk eingehen, müssen innerhalb einer bestimmten Anzahl von Millisekunden abgeschlossen sein. Dies ist jedoch nicht zu 100% geschäftskritisch (dh wir können es tolerieren, dass es die meiste Zeit pünktlich ist, und 1% ist unerwünscht, aber kein Fehler), daher der "weiche" Teil.
Jetzt ist mir klar, dass C # eine verwaltete Sprache ist und verwaltete Sprachen nicht besonders für Echtzeitanwendungen geeignet sind. Die Geschwindigkeit, mit der wir Dinge in C # erledigen können, sowie die Sprachfunktionen wie Reflexion und Speicherverwaltung erleichtern die Erstellung dieser Anwendung jedoch erheblich.
Gibt es Optimierungen oder Entwurfsstrategien, mit denen der Overhead reduziert und der Determinismus erhöht werden kann? Idealerweise hätte ich folgende Ziele
- Verzögern Sie die Speicherbereinigung, bis sie "sicher" ist.
- Lassen Sie den Garbage Collector arbeiten, ohne die Echtzeitprozesse zu beeinträchtigen
- Thread- / Prozessprioritäten für verschiedene Aufgaben
Gibt es Möglichkeiten, dies in C # zu tun, und gibt es andere Dinge, auf die Sie in Bezug auf Echtzeit bei der Verwendung von C # achten müssen?
Das Plattformziel für die Anwendung ist .NET 4.0-Clientprofil unter Windows 7 64-Bit mit. Ich habe es derzeit auf Client-Profil eingestellt, aber dies war nur die Standardoption und wurde aus einem bestimmten Grund nicht ausgewählt.