Konvertiert nach int16, int32, int64 - woher weißt du, welches du wählen sollst?

8

Ich muss oft einen retreived Wert (normalerweise als eine Zeichenkette) umwandeln - und dann es zu einem Int umwandeln. Aber in C # (. Net) müssen Sie entweder int16, int32 oder int64 wählen - woher wissen Sie, welche zu wählen, wenn Sie nicht wissen, wie groß Ihre abgerufene Nummer sein wird?

    
Vidar 06.11.2008, 21:02
quelle

6 Antworten

20

Jeder hier, der erwähnt hat, dass die Deklaration eines int16 Saves ram einen Downvote erhalten sollte.

Die Antwort auf Ihre Frage ist, das Schlüsselwort "int" zu verwenden (oder wenn Sie möchten, verwenden Sie "Int32").

Das gibt Ihnen eine Reichweite von bis zu 2,4 Milliarden Zahlen ... Auch 32bit-Prozessoren werden diese besser behandeln ... auch (und DER WICHTIGSTE GRUND ) ist das, wenn Sie planen mit diesem Int für fast jeden Grund ... es wird wahrscheinlich ein "int" (Int32) sein.

Im .NET-Framework sind 99,999% der numerischen Felder (die ganze Zahlen sind) "int" (Int32).

Beispiel: Array.Length, Process.ID, Windows.Width, Button.Height usw. usw 1 Million mal.

EDIT: Mir ist klar, dass mein Grunnen mich abwerten wird ... aber das ist die richtige Antwort.

    
Timothy Khouri 06.11.2008, 21:16
quelle
9

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

Ich glaube, dass es heute noch gilt, aber ich mache jetzt ein paar Tests.

EDIT: Ich habe eine überraschende Entdeckung: die Operationen add, subtract und multiplizieren für short (s) geben tatsächlich int!

zurück     
chakrit 06.11.2008 21:12
quelle
3

Wiederholtes Ausprobieren TryParse () macht keinen Sinn, Sie haben ein Feld bereits deklariert. Sie können Ihre Meinung nicht ändern, es sei denn, Sie machen dieses Feld vom Typ Objekt. Keine gute Idee.

Welche Daten das Feld auch darstellt, hat eine physikalische Bedeutung. Es ist ein Alter, eine Größe, eine Zählung usw. Physikalische Größen haben realistische Grenzen in ihrer Reichweite. Wählen Sie den Int-Typ aus, der diesen Bereich speichern kann. Versuchen Sie nicht, einen Überlauf zu beheben, es wäre ein Fehler.

    
Hans Passant 06.11.2008 21:17
quelle
1

Im Gegensatz zu der derzeit populärsten Antwort nehmen kürzere Ganzzahlen (wie Int16 und SByte) oft weniger Speicherplatz in Anspruch als größere Ganzzahlen (wie Int32 und Int64). Sie können dies leicht überprüfen, indem Sie große Arrays von sbyte / short / int / long instanziieren und perfmon verwenden, um die Größe verwalteter Heaps zu messen. Es ist richtig, dass viele CLR-Flavors diese ganzen Zahlen für CPU-spezifische Optimierungen erweitern, wenn sie arithmetisch arbeiten, aber wenn sie als Teil eines Objekts gespeichert werden, nehmen sie nur so viel Speicher auf wie nötig.

Sie sollten also unbedingt die Größe berücksichtigen, besonders wenn Sie mit einer großen Liste von Ganzzahlen arbeiten (oder mit einer großen Liste von Objekten, die ganzzahlige Felder enthalten). Sie sollten auch Dinge wie die CLS-Konformität berücksichtigen (die keine vorzeichenlosen Ganzzahlen in öffentlichen Mitgliedern zulässt).

Für einfache Fälle wie das Konvertieren eines Strings in einen Integer stimme ich zu, dass Int32 (C # int) normalerweise am sinnvollsten ist und wahrscheinlich auch von anderen Programmierern erwartet wird.

    
C. Dragon 76 07.11.2008 19:04
quelle
0

Wenn wir nur über ein paar Zahlen sprechen, wird die Wahl des größten keinen merkbaren Unterschied in Ihrer gesamten RAM-Nutzung machen und wird nur funktionieren. Wenn Sie über viele Zahlen sprechen, müssen Sie TryParse () für sie verwenden und den kleinsten int-Typ ermitteln, um RAM zu speichern.

    
TravisO 06.11.2008 21:03
quelle
0

Alle Computer sind endlich. Sie müssen eine Obergrenze definieren, die auf den Anforderungen Ihrer Benutzer basiert.

Wenn Sie wirklich keine Obergrenze haben und "unbegrenzte" Werte zulassen möchten, fügen Sie Ihrem Projekt die Java-Laufzeitbibliotheken von .Net hinzu. Dadurch können Sie die Klasse java.math.BigInteger verwenden, die nahezu mathematisch funktioniert -unbegrenzte Größe Integer.

Hinweis: Die .NET-Java-Bibliotheken werden mit vollem DevStudio geliefert, aber ich denke nicht, dass sie mit Express kommen.

    
Jeff B 06.11.2008 21:06
quelle

Tags und Links