取得した値を(通常は文字列として)変換してから、intに変換する必要があることがよくあります。しかし、C#(.Net)では、int16、int32、またはint64のいずれかを選択する必要があります。取得した数値がどれだけ大きいかわからない場合、どの方法を選択すればよいでしょうか。
6 に答える
ここで、Int16 セーブ RAM を宣言することは反対票を投じるべきであると述べたすべての人。
あなたの質問への答えは、キーワード「int」を使用することです(または、必要に応じて「Int32」を使用してください)。
これにより、最大24億の数値の範囲が得られます...また、32ビットプロセッサはこれらのintをより適切に処理します...また(そして最も重要な理由)は、ほとんど何らかの理由でそのintを使用する予定がある場合...おそらく「int」(Int32)である必要があります。
.Net フレームワークでは、数値フィールド (整数) の 99.999% が "int" (Int32) です。
例: Array.Length、Process.ID、Windows.Width、Button.Height など、100 万回。
編集:私の不機嫌さが私に反対票を投じようとしていることに気づきました...しかし、これは正しい答えです。
それを追加したいだけです... .NET 1.1の時代にコンパイラが最適化されたため、 「int」操作は実際にはバイトまたは短い操作よりも高速であることを思い出しました。
現在でも有効だと思いますが、現在いくつかのテストを実行しています。
編集: 驚きの発見があります: short(s) の加算、減算、および乗算操作は、実際には int を返します!
TryParse() を繰り返し試しても意味がありません。フィールドが既に宣言されています。そのフィールドをオブジェクト型にしない限り、気が変わることはありません。良い考えではありません。
フィールドが表すデータには、物理的な意味があります。それは年齢、サイズ、数などです。物理量の範囲には現実的な制限があります。その範囲を格納できる int 型を選択します。オーバーフローを修正しようとしないでください。バグになる可能性があります。
現在最も一般的な回答とは異なり、短い整数(Int16やSByteなど)は、大きな整数(Int32やInt64など)よりもメモリ内で占めるスペースが少ないことがよくあります。これは、sbyte / short / int / longの大きな配列をインスタンス化し、perfmonを使用してマネージヒープサイズを測定することで簡単に確認できます。多くのCLRフレーバーは、算術演算などを行うときにCPU固有の最適化のためにこれらの整数を拡張しますが、オブジェクトの一部として格納される場合、必要な量のメモリしか使用しません。
したがって、特に整数の大きなリスト(または整数フィールドを含むオブジェクトの大きなリスト)で作業する場合は、サイズを確実に考慮する必要があります。また、CLS準拠(パブリックメンバーで符号なし整数を許可しない)なども考慮する必要があります。
文字列を整数に変換するような単純なケースでは、Int32(C#int)が通常最も理にかなっており、他のプログラマーが期待するものである可能性が高いことに同意します。
いくつかの数値について話している場合、最大のものを選択しても、RAMの全体的な使用量に目立った違いはなく、正常に機能します。多くの数値について話している場合は、RAMを節約するために、それらに対してTryParse()を使用し、最小のint型を把握する必要があります。
すべてのコンピューターは有限です。ユーザーの要件に基づいて上限を定義する必要があります。
本当に上限がなく、「無制限」の値を許可したい場合は、プロジェクトに.Net Javaランタイムライブラリを追加してみてください。これにより、ほぼ無制限のサイズで計算を行うjava.math.BigIntegerクラスを使用できるようになります。整数。
注:.Net Javaライブラリには完全なDevStudioが付属していますが、Expressには付属していないと思います。