2016-05-18 12 views
3

Meine .NET Assembly wird in verschiedenen Projekten verwendet, die auf .NET 2.0, 3.5, 4.0, 4.5 laufen. 4.5.1, 4.5.2, 4.6.1, 4.6.2.Bietet das Kompilieren mit einer bestimmten .NET-Version irgendwelche Vorteile?

Meine .NET-Assembly verwendet keine Funktionen außer .NET 2.0.

Mit welchen .NET-Versionen sollte ich meine .NET-Assembly kompilieren? Es scheint nur 2 Versionen sinnvoll zu sein: .NET 2.0 und .NET 4.0. Dosieren mit anderen .NET-Versionen bieten irgendwelche Vorteile?

Antwort

0

Es gibt keine Leistungsunterschiede bei der Erstellung einer anderen Nebenversion. Wenn Sie beispielsweise keine der Funktionen verwenden, die in Version 4.5 hinzugefügt wurden, gibt es keinen Grund, diese Version zu kompilieren, nur um die aktualisierte Version zu verwenden.

0

mit der neuesten Version Kompilieren ist immer gut becoz 1. Als Entwickler Sie neue Funktionen zu verwenden, die erhalten 2. Jede Optimierung Rahmen wie „Profiloptimierung“ gemacht wurden eingeführt, um die Anwendung verfügbar ist.

2.0 bis 3.5 ist ein direktes Upgrade. So ist 4.0 zu 4.5 zu 4.5.1 zu 4.5.2 zu 4.6.1. Das heißt, wenn Sie 4.6.1 installieren, ersetzt es alle früheren Versionen in der 4.X-Familie.

Die einzige Zeit, die Sie für eine bestimmte ältere Version kompilieren würden, ist, wenn Sie Ihren Code auf einem Computer bereitstellen, der nicht über die neueste Version verfügt. Zum Beispiel könnten Sie als Entwickler Visual Studio 2015 Update 2 verwenden, das mit 4.6.1 ausgeliefert wird, aber Ihr Server ist immer noch auf 4.0. Aber so werden Sie nicht in der Lage sein, die neueren Funktionen, die nach 4.0 eingeführt wurden, wie async/await usw. zu verwenden.

+0

Ich brauche keine neuen .NET-Funktionen. Ich kann sie nicht verwenden, da die Bibliothek .NET 2.0 unterstützen sollte. Irgendwelche spezifischen Vorteile beim Kompilieren für 4.5.1? –

0

Es ist eine komplizierte Frage. Für den Starter heißt es in den offiziellen Ankündigungen, dass es natürlich auch Leistungsverbesserungen gibt. Das ist meistens richtig, obwohl ich bezweifle, dass es immer stimmt, besonders wenn es um Projekte mit extremer Komplexität geht.

Ich würde nur empfehlen, ein Projekt nicht in eine andere Version als die gestartete Version zu "konvertieren". Das .Net hat die Projektstrukturen sehr oft verändert, nicht nur die Bibliotheken. Und ich bezweifle stark, dass ein Konverter ein Projekt aus der Perspektive der Performance erfolgreich konvertieren kann.

Wenn es um Upgrades geht, "Berühren Sie nichts, das richtig funktioniert" ist mein Motto.

+0

Könnten Sie bitte einen Link zu einer solchen Ankündigung geben? Werden Leistungsvergleiche durchgeführt? –

+1

Für eine typische Anwendung glaube ich nicht, dass es einen signifikanten Unterschied macht. By the way, vor der Aktualisierung, sollte man seine Änderung zu einer Versionskontrolle (TFS, Git ...) verpflichtet haben, so ist es sehr einfach zu versuchen ... Wenn Sie sich nicht sicher sind, dann können Sie ändern, um beide Zweige für eine während. Wenn Sie .NET 2.0 weiterhin unterstützen müssen, verwenden Sie diese Version. – Phil1970

0

Wenn Ihr Ziel eine höhere Version ist als Sie benötigen und es funktioniert, behalten Sie es so wie es ist. Was ist der Vorteil für das Targeting von 2.0 oder 4.0? Wenn es funktioniert, ist es wirklich wichtig. Ich kann mir nicht vorstellen, dass Sie durch die Herabstufung Ihres Zielframeworks Leistungsverbesserungen erhalten.

0

Wenn Ihre Bibliothek in der .Net 2.0 App verwendet wird, konnten Sie keine neuere Version des Frameworks als Ziel verwenden.

"Eine andere Anwendung kann Ihre Bibliothek nicht mehr verwenden" ist nicht wirklich eine Leistungsverbesserung.

4

Es ist wahrscheinlich eine gute Idee, zwischen den Versionen der .NET Framework gegenüber Versionen des

Common Language Runtime

Die (CLR) ist die Komponente zu unterscheiden, die unabhängig für den Betrieb der Plattform verantwortlich ist IL-Code auf Ihrem Zielcomputer.Sie müssen Ihre App gegen alle CLR-Versionen kompilieren, die Sie unterstützen müssen.

Es gibt folgende CLR-Versionen zum Zeitpunkt des Schreibens:

  • 4,0
  • 2,0
  • 1,1
  • 1,0

.NET Framework

Die .NET-Framework-Version ist im Grunde die Version der System-Assemblys, aus denen .NET besteht. Jede .NET-Version ist so konzipiert, dass sie mit einer bestimmten Version von CLR arbeitet, aber mehr als eine .NET Framework-Version verwendet dieselbe Version von CLR. Zum Beispiel wird CLR 4.0 von .NET 4.0, 4.5 und 4.6 verwendet.

Sie können die Versionen von .NET Framework sehen, und die CLR Versionen verwenden sie hier: https://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

Sie sollten Ihre Bibliothek gegen neuere Versionen des Frameworks, wenn Ihr bereits den Aufbau gegen eine ältere nicht wieder aufbauen müssen. NET-Version, die die gleiche CLR Version zielt. Alle Systembaugruppen verwiesen sollten in einer der folgenden Weisen aktualisiert wurden, um sicherzustellen, Rückwärtskompatibilität:

  • A ‚sicher‘ in Place-Upgrade, das als die Vorgängerversion auf die gleiche Weise verhält es sei denn Code speziell in neue Opt Verhalten (zB durch Aufruf einer neuen Methode, Instanziierung einer neuen Klasse etc.).

  • Hinzufügen einer neuen Baugruppe. Da .NET Framework Versionsnummern als Teil der Namensbindung verwendet, erhalten Sie trotzdem die Version, für die Sie kompiliert haben, auch wenn andere Bibliotheken in der Anwendungsdomäne auf die neuere Version mit dem gleichen Namen verweisen.

Beachten Sie, dass das Gegenteil nicht funktioniert. Sie können niemals davon ausgehen, dass Ihre Klassenbibliothek mit einer älteren Version von .NET als mit der kompilierten Version arbeitet, auch wenn die CLR-Version die gleiche ist.

0

Im Wesentlichen müssen Sie zu einem gewissen Zeitpunkt den Nutzen für die Aktualisierung bewerten im Vergleich zu den negativen Seiten von einigen Kunden möglicherweise nicht in der Lage, die neue Version zu verwenden. Wenn beispielsweise WPF für Ihre Anwendung sinnvoll ist, müssen Sie irgendwann aufhören, alte Kunden zu unterstützen. Da XP veraltet ist und andere Versionen auf einem neueren Betriebssystem installiert werden können, ist es in vielen Fällen vorzuziehen, einfach Ihre Anforderungen zu aktualisieren.

0

Einige der wichtigsten Faktoren zur Sorge Ihre Anwendungen, die .NET-Version geeignet für die Erstellung (nicht in Reihenfolge):

1) Leistung

2) Zielplattform (x86 oder x64)

3) Verfügbare Baugruppen/Bibliotheken/Pakete

4) Migration/Abwärtskompatibilität usw.

Wenn Sie mehr Sorge über die Leistung und Ressourcennutzung haben, werfen Sie einen Blick auf diese:

http://www.codeproject.com/Articles/92812/Benchmark-start-up-and-system-performance-for-Net (einschließlich .NET 1.1-4.0)

http://www.hanselman.com/blog/BenchmarkingNETCode.aspx (Anleitung zur Benchmark verschiedenen .NET-Zielplattformen)

Die höhere Version bietet normalerweise einen geringen Leistungsvorteil (Verbesserung in nur wenigen Millisekunden), abhängig von der App-Größe und den verwendeten Baugruppen. Wenn Sie jedoch die Rückwärtskompatibilität mit älteren Systemen beibehalten möchten, sollte die niedrigste berechtigte Version in Betracht gezogen werden (d. H. .NET 2.0).

Verschiedene Maschinen geben natürlich unterschiedliche Benchmark-Ergebnisse aus. Die bekannten Best Practices sind: "Bleibe bei der Version, in die du eingebaut bist", abhängig davon, was die Nutzer benötigen.

Versionskontrolle wie SVN/CVS/Git/TFS wird als hilfreich betrachtet, wenn Sie Änderungen basierend auf dem plattformspezifischen Ziel vornehmen möchten.

0

Dies ist schwierig zu bestimmen, da hier ein paar Dinge im Spiel sind. .NET 2.0 ist natürlich viel kleiner und weniger komplex als die neueren Versionen. Wenn das Framework größer und besser wird, wird es auch komplizierter und theoretisch langsamer, aber das ist nicht wirklich der Fall. Zusammen mit neuen Versionen von .NET gibt es viele Leistungsverbesserungen. Die ältere Version ist möglicherweise kleiner, aber in einer neueren Version wurden die Dinge möglicherweise anders implementiert, sodass weniger Systemressourcen benötigt werden, wenn die Anwendung ausgeführt wird.

Der einzige Weg, um eine solide Antwort zu bekommen, ist es zu testen. Kompilieren Sie eine App mit 2.0 und versuchen Sie dann, sie in die jeweils neuere Version zu konvertieren. Führen Sie einige Benchmark-Tests durch, um zu sehen, welche Leistung besser ist, und Sie erhalten eine definitive Antwort.

Während ich sehe, woher kommen Sie mit dieser Frage. Es macht Sinn, dass größere und kompliziertere Systeme mehr Ressourcen benötigen, um sie zu verwenden, aber die Erweiterung ist nicht das einzige, was mit neuen .NET-Versionen einhergeht. Mit der Computerarchitektur ändert sich auch das Framework. Nehmen wir zum Beispiel an, dass .NET 2.0 wieder freigegeben wurde, bevor Multi-Core-CPUs existierten, und dass .NET 3.0 dann Unterstützung dafür hinzugefügt hat. Der Code wird viel besser auf einem Computer mit einer Multi-Core-CPU laufen, wenn Sie das neuere Framework verwenden mit dem alten Framework