問題タブ [design-decisions]
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.
.net - .NET Tuple and Equals のパフォーマンス
これは、今日まで気が付かなかったことです。どうやら、よく使用されるタプル クラス ( など) の .NET 実装により、Tuple<T>
等価ベースの操作が実行されるときに、値の型に対してTuple<T1, T2>
ボクシング ペナルティが発生するようです。
クラスがフレームワークにどのように実装されているかを次に示します (ソースは ILSpy 経由)。
私が見る問題は、2 段階のボックス化とボックス化解除が発生することです。1つはアイテムをどのボックスEquals
で呼び出すか、2 つは非ジェネリック呼び出しで、内部的にアイテムを元のタイプにボックス化解除する必要があります。comparer.Equals
EqualityComparer<object>
Equals
代わりに、なぜ彼らは次のようなことをしないのでしょうか:
.NET タプル クラスでこのように等価性が実装されているのを見て驚きました。辞書の 1 つでタプル型をキーとして使用していました。
最初のコードに示すようにこれを実装する必要がある理由はありますか? その場合、このクラスを使用するのは少しお勧めできません。
コードのリファクタリングと重複しないデータが大きな懸念事項になるべきではなかったと思います。同じ非ジェネリック/ボクシングの実装も遅れていIStructuralComparable
ますが、IStructuralComparable.CompareTo
あまり使用されていないため、頻繁に問題になることはありません。
上記の 2 つのアプローチを、次のように負担の少ない 3 番目のアプローチでベンチマークしました (要点のみ)。
いくつかのTuple<DateTime, DateTime>
フィールドでは、1000000Equals
が呼び出されます。結果は次のとおりです。
最初のアプローチ (元の .NET 実装) - 310 ミリ秒
2 番目のアプローチ - 60 ミリ秒
3 番目のアプローチ - 130 ミリ秒
デフォルトの実装は、最適なソリューションよりも約 4 ~ 5 倍遅くなります。
precision - IEEE-754 の単精度および倍精度形式はどのように決定されますか?
これらがどのように決定されるかに興味があります:
- 単精度は次のとおりです。e は 8 ビット、残り (23 ビット) は仮数部です。
- 倍精度: e の 11 ビットと残り (52 ビット) は c の仮数で、符号は 1 ビットです。
では、仮数のビット数と e のビット数はどのように決定されるのでしょうか。これは初心者の質問だと思いますが、答えを知りたいです。
java - 単一の EJB セッション Bean が複数のインターフェースを持つことができるのはなぜですか?
EJB 3 in Actionという本から EJB 3.0 について学んでいます。セッション Bean の解剖学のセクションでは、次のことが言及されています。
クライアントが Bean を呼び出すためのインターフェースは、ビジネス インターフェースと呼ばれます。このインターフェースは基本的に、特定のアクセスメカニズムを介したアクセスに適した Bean メソッドを定義します。ここで注目すべき興味深い点は、1 つの EJB が複数のインターフェースを持つことができるという事実です。つまり、EJB 実装クラスは多態的である可能性があります。つまり、さまざまなインターフェイスを使用するさまざまなクライアントがそれらをまったく異なる方法で使用できます。
単一の EJB が複数のインターフェースを持つことができる理由を設計上の決定の理由を理解したいですか? ここでの概念を理解するのに役立つ例は非常に役立ちます。
sql - トランザクション ログにどのデータベースを選択する必要がありますか
データベースについて質問があります。ユーザーがリクエストを送信し、ベンダーから回答を得るアプリケーションを開発しています。リクエストを受信するサーバーがあります(残りの呼び出しまたは実行中のWebサービスを介して、まだ決定していません)。
新しいリクエストが来るたびにデータベースに記録し、ベンダーが応答したときにレコードを更新して、それが受け入れられたかどうかなどを示す必要があります。このようにトランザクションを保存する唯一の理由は、レポートとログ記録のためです。私の要件を述べたので、これについてより専門的な知識を持った人の助けが必要です。
これまでのところ、すべてのレコードが 1 つのタイプと同じ情報を持つため、構造化データベースを使用するのが最善であるということです。そのため、各レコードに両方を含む半構造化データベースを使用してスペースを無駄にする必要はありません構造と情報。
しかし、この種の「作成/更新操作のみ」に特に適したデータベースがあるかどうかはわかりません?? 前述したように、データを読み取る必要があるのは、おそらく 1 か月に 1 回程度です。どんな入力でも大歓迎です!
java - FileChooser.showOpenMultipleDialog 内部設計
JavaFX の FileChooserを使用する必要がありましたが、何も選択されていない場合にメソッドshowOpenMultipleDialog
が返されることがわかりました。null
File
動作精度:少なくとも 1 つのファイルが選択されている場合にのみ、[開く] ボタンを使用してダイアログから戻ることができます。
この場合、空のリストによってモデル化できる値がないのに、戻り値のそのような選択の理由を誰かが知っていますか?
JavaFX 開発者は賛成null
ですか? それとも別の技術的な理由がありますか?
c# - タプルの実装
重複していたらごめんなさい。その件についての完全な説明は見つかりませんでした。そして、MSDNはいつものように曖昧です...
.Net タプルは、そのまま使用できる equals と GetHashCode の実装を提供しますか? (結果として == 演算子)
タプルがデフォルトですべてのアイテムを比較することを期待できますか、それともここに示されているように IEqualityComparer を提供する必要がありますnet-tuple-and-equals-performance ?
辞書のキーとして確実に適用できますか?
私は小さなテストを実行しました:
結果は偽と真でした。equals は実装されていますが、演算子は実装されていないと思います。これは == 演算子が参照を比較するということですか? また、IEqualityComparer (フレームワーク バージョン 4) でオーバーロードが見つかりませんでした。
ありがとう。
.net - ContinueWith が Task をパラメータとして渡すのはなぜですか
私は持っていTask<T> t1
ます。Task t2
完了後に別のものを実行したいt1
。.ContinueWith
の方法を使用することにしましたt1
。
ただし、の Action パラメーターはそれ自体ではなく、 にTask<T>
渡されるため、これを行うことはできません。代わりに、アクションに渡されたパラメーターの結果を取得して、アクションを操作する必要があります。Task<T>
T
ContinueWith のポイントがチェーンに別のアクションを追加することである場合、言語設計者は前のタスクの結果を単純に渡さなかったのはなぜでしょうか? または、非ジェネリック タスクの場合、パラメーターなしのアクションが必要ですか?