Frage

Ich habe oft einen retreived Wert konvertieren (in der Regel als String) - und es dann in einen int umwandeln. Aber in C # (.NET) Sie haben die Wahl entweder int16, int32 oder int64 - wie Sie wissen, welches man zu wählen, wenn Sie nicht wissen, wie groß Ihre abgerufenen Zahl sein wird?

War es hilfreich?

Lösung

Jeder hier die erwähnt hat, dass ein Int16 spart ram erklären sollte eine downvote erhalten.

Die Antwort auf Ihre Frage ist das Stichwort „int“ zu verwenden (oder wenn Sie Lust haben, verwenden Sie „Int32“).

Das gibt Ihnen eine Reichweite von bis zu 2,4 Milliarden Zahlen ... Auch 32-Bit-Prozessoren werden diese ints besser in den Griff ... auch (und Der wichtigste Grund ) ist, dass, wenn Sie planen mit, dass int für fast irgendeinem Grund ... es wird wahrscheinlich ein „int“ sein müssen (Int32).

In .NET Framework, 99,999% der numerischen Feldern (die ganze Zahlen sind) sind "ints" (Int32).

Beispiel: Array.length, Process.ID, Windows.Width, Button.Height, etc, etc, etc 1 Million mal

.

EDIT:. Ich weiß, dass meine schlechte Laune, um mich geht nach unten gestimmt ... aber das ist die richtige Antwort

Andere Tipps

Ich wollte nur hinzufügen, dass ... Ich erinnerte mich, dass in den Tagen von .NET 1.1 der Compiler optimiert wurde, so dass ‚int‘ Operationen sind tatsächlich schneller als Byte oder kurze Operationen.

Ich glaube, es heute noch hält, aber ich bin mit jetzt einige Tests.


EDIT: Ich habe eine überraschende Entdeckung bekam: das Addieren, Subtrahieren und Operationen für kurze multiplizieren (n) eigentlich int zurückgeben

Immer wieder versuchen TryParse () macht keinen Sinn, Sie haben ein Feld bereits erklärt. Sie können nicht Ihre Meinung ändern, wenn Sie das Feld vom Typ Object machen. Keine gute Idee.

Was auch immer Daten das Feld darstellt, hat eine physikalische Bedeutung. Es ist ein Alter, Größe, eine Zählung usw. Physikalische Größen realistische Beschränkungen auf ihrer Reichweite haben. Wählen Sie den int-Typ, diesen Bereich zu speichern. Versuchen Sie nicht, einen Überlauf zu beheben, wäre es ein Fehler sein.

Im Gegensatz zu der aktuellen populärste Antwort, kürzere ganze Zahlen (wie Int16 und SByte) tun oft nehmen weniger Platz im Speicher als größere ganze Zahlen (wie Int32 und Int64). Sie können dies leicht durch Instanziieren große Arrays von sbyte / short / int / long überprüfen und mit perfmon verwalteten Heap Größen zu messen. Es ist wahr, dass viele CLR Aromen werden diese ganzen Zahlen für CPU-spezifische Optimierungen erweitern, wenn auf sie Arithmetik zu tun und so, aber wenn sie als Teil eines Objekts gespeichert sind, nehmen sie nur so viel Speicher auf, als notwendig ist.

Also, sollten Sie auf jeden Fall einer Größe berücksichtigen, vor allem, wenn Sie mit großer Liste von ganzen Zahlen arbeiten werden (oder mit großer Liste von Objekten enthalten Integer-Felder). Sie sollten auch Dinge wie CLS-Compliance betrachten (die alle für ganze Zahlen ohne Vorzeichen in den öffentlichen Mitglieder nicht zulässt).

Für einfache Fälle wie eine Zeichenfolge in einer ganzen Zahl konvertieren, stimme ich einen Int32 (C # int) in der Regel am meisten Sinn macht und ist wahrscheinlich, was andere Programmierer erwarten.

Wenn wir nur über ein paar Zahlen sprechen, die größte Auswahl keinen spürbaren Unterschied in Ihrer gesamten RAM-Nutzung machen und einfach funktionieren. Wenn Sie über viele Zahlen sprechen, müssen Sie TryParse () auf, sie nutzen und den kleinsten Typ int herauszufinden, RAM zu speichern.

Alle Computer sind endlich. Sie müssen eine Obergrenze definieren auf, was Sie denken, dass Ihre Benutzer Anforderungen sein wird.

Wenn Sie wirklich keine obere Grenze und wollen ‚unbegrenzt‘ Werte ermöglichen, versuchen Sie die .Net Java-Laufzeitbibliotheken Hinzufügen zu Ihrem Projekt, das Ihnen erlaubt, die java.math.BigInteger Klasse zu verwenden - die Mathe tut auf fast -Unlimited Größe integer.

Hinweis: Die .NET-Java-Bibliotheken sind mit voller DevStudio, aber ich glaube nicht, dass sie mit Express kommen

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top