問題タブ [temporary-objects]
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.
java - Java の最適化: 一時変数を使用したクラス変数 VS の宣言
まず第一に、私の英語が完璧でなくてすみませんが、私は英語圏の国(スペイン)の出身ではないので...
さて、ここで質問です。クラスを作成するとき、物事を明確にするために、可能な限り一時変数を使用することをお勧めしますか、それとも変数をクラス変数として宣言することをお勧めしますか?
単純なクラス SpriteSheet を使用した例を示します。Java のほとんどすべての 2D ゲームで使用される、非常に短く人気のあるクラスです。
これは、私が見ていたチュートリアルの作成者によって最初に計画されたとおりのコードです。
}
ポイントは、彼は私の知る限りすべての Java 規則に従って、通常のクラスを行っているということです。それを見て、もう少し改善できると思いました。まったく同じクラスの私のバージョンは次のとおりです。
}
念のために、あまり注意を払いたくない場合は、変更した内容とその理由を再開してみます: - クラス宣言に "final" を追加しました。インスタンス化します。- 配列を除くすべてのクラス変数を削除しました。これは、このクラスから使用する唯一のものであるためです。残りの変数をクラス変数として宣言するのは、単なるメモリの無駄だと思います。それらが一時的なものである場合、私が間違っていなければ、それらは使用され、GC は遅かれ早かれそれらを処理し、メモリを解放します。- ランタイムの残りの部分はそのままになるため、配列を final としてマークしました。- 正方形でないスプライト シートを使用する場合に備えて、SIZE 定数を幅と高さに分割します。- w と h を宣言するのは実際には良い考えです。パラメータでメソッドを呼び出すと、通常、実行速度が低下するためです(または、それは私がいくつかの場所で読んだことです)。- 0 は数回使用されるため、変数として宣言すると実行速度が向上すると思います (ほんの少しですが、とにかく目立たないでしょう)。
そして、それは基本的にすべてです。私は学生であり、おそらく私はいくつかの非常にn00bの間違いを犯していることに注意してください。経験豊富なプログラマーがたくさんいると確信しているので、ここで質問したかったのです.
SpriteSheet クラスについてはあまり気にしませんが、最適化の品質についてもっと知りたいと思っています。
私は物事を改善しましたか、それとも最悪の状態にしましたか (物事を実際に遅くしたり、読みにくくしたり、将来の保守を難しくしたり、とにかくコンパイラーが行うことを行ったりしました...)?
私の質問が長すぎて漠然としすぎている場合は申し訳ありませんが、私の最初の質問は簡単です;)
前もって感謝します。
編集:
少し休憩してから読んだだけですが、意味がありません (幅と高さのパラメーターを解析して load() を使用していて、それらを使用していないことがわかりましたか?)
これは私がそうあるべきだと私が信じているとおりです:
}
メソッドが本当に必要ないことに気づきました。コンストラクターですべてを実行できます。
c++ - c++ string+string 一時オブジェクトの使用が異なるコンパイラで異なるのはなぜですか?
このコードを見てください。
私は評判がなく、画像を投稿できないので、手書きで結果を書きます。
= Visual Studio 2013 ver.12.0.30110.00
= Dev-C++ ver.4.9.9.2
最初の以下は、Visual Studio によってコンパイルされた実行結果です。
2 つ目は、Dev-C++ によってコンパイルされます。
何がこの違いを生んでいるのだろうか。
お返事をお待ちしております。ありがとう :)
mysql - MySQL テーブルを、テーブル自体に依存するコンストラクトの double 集計に更新します。
テーブルを更新する必要がありますが、新しい値を取得するには一時テーブルを作成する必要があるようです。その理由は、 を計算する必要があるからsum
ですmax
。私はそれを行うことができますか?
擬似コードは次のようになります。
括弧を使用して、実行する必要がある部分を示しましたが、UPDATE クエリでは無視されました...
と の両方がmax
ありsum
、tmp テーブルを回避する方法がわかりません。しかし、できれば、そのような解決策を喜んで提供します。
私は@flaschenpostとこの投稿の助けを借りて得た答えをここに置きます:その結合された値の合計へのSQL更新
sql-server - Oracle 一時ストレージ
既存のテーブルの一部の値を修正するために、ワンショット スクリプトを実行する必要があります (つまり、実際のシステムにはデプロイされません)。
スクリプト自体は関係ありません。ここでの問題は、「いくつかの値」の部分です。調整するデータ (キーと古い値と新しい値) は、スプレッドシートで収集されました。多くの行があり、4 つまたは 5 つの列があるとします。
MSSQL Server 用語では、入力値を保持する一時テーブルを作成し、スプレッドシートを CSV にエクスポートした後にそれらをすべて入力します (さらに、おそらく sed(1) または paste(1) UNIX シェル コマンドを使用して、いくつかのテキスト変換を行います)。
Oracleでこれを行う必要があります。
Oracleの一時テーブルは、データに関する一時的なものにすぎないようです。つまり、使用する前にデータベースに既に存在している必要があります。私にはそれを作成するために必要なアクセス許可がありません。SQLServer では、通常のテーブル作成権限に関係なく、一時テーブルを作成できます。
何か案は?
c++ - 一時的な T は、パラメーターとして、C++11 で T(const T&) または T(T&&) を呼び出す必要がありますか?
したがって、最初にコーディングします。
次に、C++11 機能をオンにして cygwin + gcc 4.8.2 から出力します。
私がよく理解していないのは、x41 と x51 の行です。x41 の場合、関数呼び出しから返された一時的に移動コンストラクタまたはコピーを呼び出す必要がありますか? x51についても同じ質問です。
2 番目の質問は、出力を見ると、x41 と x51 の構成では、定義されたコンストラクターが呼び出されませんでしたが、オブジェクトはメモリ内に常駐しているため、明らかに作成されているということです。これはどうやってできるの?
oracle - Oracle SQL開発者で実行時にテーブルを作成する方法
選択クエリから返されるカウントと同じ数の列を持つ一時テーブルを実行時に作成するにはどうすればよいですか? たとえば、開始時には、ユーザーが入力したときに選択クエリが返すアイテムの数がわかりません。ユーザーが入力した検索基準の下にアイテムの数が返されます。したがって、すべてのアイテムの情報は異なる列に格納されるため、実行時にテーブルを作成する必要があります。それを行う方法を提案してください。
c++ - C++ ブレース初期化子リスト、一時的な有効期間
私は次のコードを持っています:
initializer_list は std::initializer_list であり、string_view は std::string ビューではありませんが、const string& および const char* からのコンストラクターを持つ非常に類似したクラスです。
次に、次の呼び出しがありjoin
ます。
少し調査した結果、結果の初期化子リストの最初の要素が"this"
butではないことがわかりました"\0his"
。これは、によって作成されたテンポラリのデストラクタが、テンポラリの作成string("this")
直後に呼び出されるためですstring_view
(したがって、無効なポインタが含まれています)。の寿命がstring("this")
完全式の最後まで延長されないのはなぜEXPECT_EQ("this", join({ string("this") }));
ですか?
編集
わかりました、あなたが示唆したように、自己完結型の例があります:
最後の Visual Studio C++ (Express) でコンパイルされたこのプログラムの出力:
上記のプログラムはおそらく不正な形式であるため、コンパイラによって異なる場合があります。
デバッガーでの呼び出しの順序を調べたところ、次の順序があります。
string("this")
のコンテンツを関数内で利用できるようにしたいと思いjoin
ます。`string("this") が前に破棄されるため、そうではありません。
関数がstring("this")
呼び出される前に一時文字列のデストラクタが呼び出されるのはなぜですか、つまり、完全な式の終わりまで延長されないのはなぜですか?join
string("this")
join({ string("this") })