問題タブ [unboxing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
10 に答える
34005 参照

c# - 「as」型とnull許容型によるパフォーマンスの驚き

null許容型を扱うC#in Depthの第4章を改訂しているところです。また、「as」演算子の使用に関するセクションを追加して、次のように記述できるようにします。

これは本当にすてきで、「is」の後にキャストを使用することで、C#1の同等のものよりもパフォーマンスを向上させることができると思いました。結局のところ、この方法では、動的型チェックを1回だけ要求してから、単純な値チェックを要求するだけで済みます。 。

ただし、これは当てはまらないようです。以下にサンプルのテストアプリを含めました。これは基本的にオブジェクト配列内のすべての整数を合計しますが、配列には多くのnull参照と文字列参照、およびボックス化された整数が含まれています。ベンチマークは、C#1で使用する必要のあるコード、「as」演算子を使用するコード、およびLINQソリューションをキックするためだけに使用するコードを測定します。驚いたことに、この場合、C#1コードは20倍高速です。また、LINQコード(イテレーターが関係していることを考えると、低速になると予想されていました)でさえ「as」コードよりも優れています。

null許容型の.NET実装はisinst本当に遅いですか?unbox.any問題を引き起こすのは追加ですか?これについて別の説明はありますか?現時点では、パフォーマンスに敏感な状況でこれを使用することに対する警告を含める必要があるように感じます...

結果:

キャスト:10000000:121
As:10000000:2211
LINQ:10000000:2143

コード:

0 投票する
2 に答える
885 参照

c# - C#コンパイラ+ボクシング+制約付きのジェネリックコード

次のジェネリックメソッド用に生成されたMSILコードを調べてみましょう。

見て:

ただし、上記のジェネリックコードの場合、より効率的なIL表現は次のようになります。

制約から、値が参照型にボックス化されていることがわかります。オペコードの後、ILスタックの値はすでにへの有効な参照になり、ボックスを解除せずに使用できるUnbox.anyため、オペコードは完全に冗長です。box!!U

C#3.0コンパイラが制約メタデータを使用してより効率的なジェネリックコードを出力しないのはなぜですか?Unbox.anyは小さなオーバーヘッド(わずか4倍から5倍遅い)を与えますが、このシナリオでより良いコードを出力しないのはなぜですか?

0 投票する
2 に答える
1142 参照

c# - ボックス化解除を防ぐ方法 - 任意の SQL 行を読み取るときのボックス化メモリ オーバーヘッド

SQL クエリの行を表すクラスを作成しています。クラスのインデクサー プロパティを介してフィールド データにアクセスできるようにします。オブジェクトの内部リストにデータをロードすれば、これは簡単です。私はすでにこれを試しましたが、プリミティブのボクシングに満足していません。ボクシングにより、メモリ要件が 20% 増加します。プリミティブをプリミティブとしてクラスに保存したいと思います。DataTable クラスは、IDataReader から返されたスキーマの列ごとに配列を作成することにより、プリミティブを格納します。この方法でクラスを実装しましたが、行によって内部的に参照される列ではなく、行オブジェクトにデータを格納することをお勧めします。

これを達成するためのアイデアはありますか?

0 投票する
2 に答える
161 参照

c - ボックス化されていない浮動小数点数の配列を作成する方法 Ptr を取得できます

私は HopenGL でいくつかの作業をしようとしていますが、float の配列を指す Ptr が必要です。私が読んだことから、uarrayとstorableArrayは、何らかの組み合わせで、進むべき道のようです。

0 投票する
8 に答える
277 参照

c# - オブジェクトがジェネリックを使用したコレクションで使用される場合、.Netは型キャストされますか?

.net CLRは、オブジェクトをコレクション宣言に記載されているオブジェクトに型キャストしますか?私が宣言した場合

.netは、追加および取得中にこのオブジェクトをタイプキャストしますか?????

さて、質問自体は誰もがはっきりと理解していなかったと思います。詳しく説明させてください。Javaにはジェネリックスがありますが、コードを逆コンパイルすると、コンパイラーはCollectionオブジェクトが使用されるすべての場所に型キャストを配置します。例:リストlistOfStrings; listOfStrings.add( ""); 文字列値=listOfStrings.get(1); クラスファイルを逆コンパイルすると、このリストlistOfStringsが表示されます。listOfStrings.add( ""); 文字列値=(String)listOfStrings.get(1); ここで、コンパイラは文字列の型キャストを解析しました。

さて、私の質問は、それが.Netでも同じかどうかということです。

0 投票する
5 に答える
1062 参照

java - 内部コンパイラ エラー ArrayIndexOutOfBoundsException: -1 ... generateUnboxingConversion

これをコンパイルしようとすると、奇妙な例外が発生しました。

有効なチェック (ボックス化解除-暗黙のキャスト - ボックス化解除) ですか?

0 投票する
2 に答える
1429 参照

c# - データベース値をアンボックスする適切な方法

古い Oracle データベースを使用していますが、データベースから取得した値をボックス化解除するためのより良い方法があると思います。

現在、さまざまなタイプ固有のメソッドでいっぱいの静的クラスがあります。

..など、さまざまなタイプがありますが、もっと良い方法があるはずだと思いますか? 値をアンボックスしたい場合は、次のようにします...

p>

ジェネリック クラスを使用してすべての異なる型を処理することを考えましたが、それを実行する最善の方法を実際に理解できませんでした。

何か案は?

0 投票する
4 に答える
3549 参照

java - Java 自動ボックス化解除 - コンパイラの警告はありますか?

私は Java での自動ボクシングの大ファンです。これにより、見苦しいボイラー プレート コードが大幅に節約されます。ただし、 Number オブジェクトが null である可能性がある状況では、自動ボックス化解除が混乱を招くことがわかりました。javac警告でコードベースで自動アンボックス化が発生している場所を検出する方法はありますか? ボックス化解除のみの発生を検出する他のソリューション (FindBugs や Eclipse 固有のコンパイラ警告など) が見つからないため、高く評価されます。

明確にするために、ボックス化時に警告を生成したくありません-ボックス化解除のみ。

混乱を招く NullPointerExceptions を引き起こす可能性のあるコードの簡単な例を次に示します。

0 投票する
5 に答える
2732 参照

c# - 匿名型

私はDictionary(TKey, TValue)好きです

その後、その配列リストにこのような匿名型を追加します

どうすればその変数をアンボックスしてそれらのプロパティにアクセスできますか??

0 投票する
3 に答える
2778 参照

vb.net - null 許容型で .GetValueOrDefault(0) と If(variable, 0) を使用することに違いはありますか?

cを計算するための以下の2つの方法に違いはありますか...特にボックス化/ボックス化解除の問題はありますか?