約 47,338 件
https://w.atwiki.jp/stgbuilder/pages/364.html
<描画の最適化> 内容 キャラクタ編集の「描画の最適化」のフラグをオンにすることにより、描画を高速化 利点 ①画面内に大量に出る単一スプライトのキャラクタの描画を高速化 ②単一スプライトであれば、パターン番号やアニメ番号の変化は可能 ③制限をクリアしていれば、複数のキャラクタの最適化も可能 欠点 ①キャラクタの影、多関節、エフェクト、文字は描画されない ②親子階層は使用できない ③描画方式(ファンクションやフィルタ)は、最適化オプション付きスプライト全般で一種類のみ ④使用できるスプライトが最適化オプション付きスプライト全般で一種類のみ
https://w.atwiki.jp/msx-sdcc/pages/35.html
sdccのCコンパイラの最適化はデフォルトで有効化される。 部分的にオプションを指定することで最適化を無効化したり、有効化する。 sdcc -c -mz80 [optimizer option] source.c 基本的な最適化オプションは以下のとおり。 option 内容 --nogcse コード全体でsubexpressionを除去しない。これはCコード上に現われる部分式の共通部分について、最適化コードが短縮化することを避ける。対象はループなどに限らない。詳細は8.1.1に記載がある。 --noinvariant forループ構文条件下などで不変な部分式を検出しループ外に置き定数化する最適化を行なわない。詳細は8.1.4 --noinduction 同じくforループ構文中などのループインダクション最適化を行なわない。このオプションではループ条件下の配列インデクス掛け算などを加算に置き換え変更しない。 --nojtbound switch文の時の境界条件チェックをしない。 --noloopreverse forループ構文中などのループ境界チェックをしない。 --nolabelopt アセンブラ中のラベルに対する最適化をしない。この結果アセンブラリストが読みやすくなる。 --no-xinit-opt memcpy()を用いる際にcode領域からdata領域に対して行なうなどの場合にメモリーの初期化コードを用いない。 --nooverlay ローカル変数や関数の引数はRAM上に配置される際、変数の配置場所のオーバーレイなどをおこなわない。これは拡張メモリなどに関係するだろう。 --no-peep Peep hole最適化を行なわない。このpeep hole最適化は特にアセンブラ命令コードレベルのルールベースのパターンマッチングによるコードの無駄を削減するための最適化を行なう。 --peep-asm Peep hole最適化について、インラインアセンブラ部分は無効としパスする。 --peep-return Peep hole最適化による関数などのリターンコード部分を最適化する。これはデフォルト動作である。デバック時には無効である。 --no-peep-return リターンコードの最適化を行なうPeep hole最適化を無効とする。 --opt-code-speed 可能な限りコードサイズを無視して早いコード生成をおこなう。 --opt-code-size 可能な限りスピードを無視して小さなメモリサイズのコード生成をおこなう。 --fomit-frame-pointer ローカル変数が関数内で利用されていない場合に変数へのフレームポインタ処理を省略する。 そのほかdead code最適化(未使用の変数や関数の削除)やcopy code最適化(変数の値の複写の際、変数参照から定数に変更)なども可能らしい。 コンパイル時に最適化を無効化する場合は以下 sdcc -c -mz80 --nogcse --nooverlay --no-peep --noinvariant --noinduction --nojtbound --noloopreverse --nolabelopt --no-xinit-opt source.c 特に指定しない場合は幾つかの最適化が有効となる。 sdcc -c -mz80 source.c 特定のオプションを有効ならば↓ sdcc -c -mz80 --opt-code-size source.c コンパイラが作成するアセンブラをデバックする場合は最適化は全て無効化する方が良いだろう。 最適化オプションの例 以下のソースを最適化有り、無しで比較する。 #include stdio.h void main(void){ int i=999; int j; int k; float a=123.4; for(k=0; k 10; k++){ j=(int)a; printf("%d %d",i,j); } } 最適化無しの時のコンパイルオプションは以下 sdcc -c -mz80 --nogcse --nooverlay --no-peep --noinvariant --noinduction --nojtbound --noloopreverse --nolabelopt --no-xinit-opt src.c アセンブラソースは以下 0000 48 _main_start 0000 49 _main 0000 DD E5 50 pushix 0002 DD 21 00 00 51 ldix,#0 0006 DD 39 52 addix,sp 0008 21 F8 FF 53 ldhl,#-8 000B 39 54 addhl,sp 000C F9 55 ldsp,hl 56 ;src.c 5 int i=999; 000D DD 36 FE E7 57 ld-2 (ix),#0xE7 0011 DD 36 FF 03 58 ld-1 (ix),#0x03 59 ;src.c 8 float a=123.4; 0015 DD 36 F8 CD 60 ld-8 (ix),#0xCD 0019 DD 36 F9 CC 61 ld-7 (ix),#0xCC 001D DD 36 FA F6 62 ld-6 (ix),#0xF6 0021 DD 36 FB 42 63 ld-5 (ix),#0x42 64 ;src.c 10 for(k=0; k 10; k++){ 0025 DD 36 FC 00 65 ld-4 (ix),#0x00 0029 DD 36 FD 00 66 ld-3 (ix),#0x00 002D 67 00108$ 002D 68 00101$ 002D DD 7E FC 69 lda,-4 (ix) 0030 D6 0A 70 suba, #0x0A 0032 DD 7E FD 71 lda,-3 (ix) 0035 DE 00 72 sbca, #0x00 0037 E2r3Cs00 73 jpPO, 00109$ 003A EE 80 74 xora, #0x80 003C 75 00109$ 003C FAr42s00 76 jpM,00102$ 003F C3r75s00 77 jp00105$ 0042 78 00102$ 79 ;src.c 11 j=(int)a; 0042 DD 6E FA 80 ldl,-6 (ix) 0045 DD 66 FB 81 ldh,-5 (ix) 0048 E5 82 pushhl 0049 DD 6E F8 83 ldl,-8 (ix) 004C DD 66 F9 84 ldh,-7 (ix) 004F E5 85 pushhl 0050 CDr00s00 86 call___fs2sint 0053 F1 87 popaf 0054 F1 88 popaf 0055 4D 89 ldc,l 0056 44 90 ldb,h 91 ;src.c 12 printf("%d %d",i,j); 0057 11r7As00 92 ldde,#__str_0 005A C5 93 pushbc 005B DD 6E FE 94 ldl,-2 (ix) 005E DD 66 FF 95 ldh,-1 (ix) 0061 E5 96 pushhl 0062 D5 97 pushde 0063 CDr00s00 98 call_printf 0066 F1 99 popaf 0067 F1 100 popaf 0068 F1 101 popaf 0069 102 00103$ 103 ;src.c 10 for(k=0; k 10; k++){ 0069 DD 34 FC 104 inc-4 (ix) 006C C2r72s00 105 jpNZ,00110$ 006F DD 34 FD 106 inc-3 (ix) 0072 107 00110$ 0072 C3r2Ds00 108 jp00101$ 0075 109 00104$ 0075 110 00105$ 0075 DD F9 111 ldsp,ix 0077 DD E1 112 popix 0079 C9 113 ret 007A 114 _main_end 007A 115 __str_0 007A 25 64 20 25 64 116 .ascii "%d %d" 007F 00 117 .db 0x00 118 .area _CODE 119 .area _CABS 最適化オプション有りの場合 sdcc -c -mz80 src.c アセンブラソース 0000 48 _main_start 0000 49 _main 50 ;src.c 10 for(k=0; k 10; k++){ 0000 11 0A 00 51 ldde,#0x000A 0003 52 00103$ 53 ;src.c 12 printf("%d %d",i,j); 0003 01r1Ds00 54 ldbc,#__str_0 0006 D5 55 pushde 0007 21 7B 00 56 ldhl,#0x007B 000A E5 57 pushhl 000B 21 E7 03 58 ldhl,#0x03E7 000E E5 59 pushhl 000F C5 60 pushbc 0010 CDr00s00 61 call_printf 0013 F1 62 popaf 0014 F1 63 popaf 0015 F1 64 popaf 0016 D1 65 popde 0017 1B 66 decde 67 ;src.c 10 for(k=0; k 10; k++){ 0018 7A 68 lda,d 0019 B3 69 ora,e 001A 20 E7 70 jrNZ,00103$ 001C C9 71 ret 001D 72 _main_end 001D 73 __str_0 001D 25 64 20 25 64 74 .ascii "%d %d" 0022 00 75 .db 0x00 76 .area _CODE 77 .area _CABS 前者ではメモリーに変数が保存され読み書きされているが、後者はレジスタに定数化されている。 型のキャストは、前者はきちんとコードが実行されるが、後者は最適化される段階で型変換がコンパイラ処理により行なわれている。 また後者は全体としてソースのサイズも短い。 MSDOSのCコンパイラは標準ライブラリ全てがリンカで結合されるためにexeのバイナリ ファイルサイズが極端に大きくなるが、 SDCCはビルド時に参照されている関数やライブラリのみが選択的にリンクされるため 実行形式やバイナリの肥大化はおこらない。
https://w.atwiki.jp/abwiki/pages/227.html
MessageBox(3,3,3,3) これをコパイルしてexeを出す。このexeをdumpbin.exeで逆アセンブルする。 すると… 00401000 55 push ebp 00401001 E8 04 0E 00 00 call 00401E0A 00401006 6A 00 push 0 00401008 E8 AC 14 00 00 call 004024B9 0040100D A3 4C 56 40 00 mov dword ptr ds [0040564Ch],eax 00401012 6A 00 push 0 00401014 E8 A0 14 00 00 call 004024B9 00401019 A3 50 56 40 00 mov dword ptr ds [00405650h],eax 0040101E 6A 00 push 0 00401020 E8 94 14 00 00 call 004024B9 00401025 A3 54 56 40 00 mov dword ptr ds [00405654h],eax 0040102A 6A 00 push 0 0040102C E8 88 14 00 00 call 004024B9 00401031 A3 58 56 40 00 mov dword ptr ds [00405658h],eax 00401036 6A 00 push 0 00401038 E8 7C 14 00 00 call 004024B9 0040103D A3 5C 56 40 00 mov dword ptr ds [0040565Ch],eax 00401042 6A 00 push 0 00401044 E8 70 14 00 00 call 004024B9 00401049 A3 60 56 40 00 mov dword ptr ds [00405660h],eax 0040104E 6A 00 push 0 00401050 E8 64 14 00 00 call 004024B9 00401055 A3 64 56 40 00 mov dword ptr ds [00405664h],eax 0040105A 6A 00 push 0 0040105C E8 58 14 00 00 call 004024B9 00401061 A3 68 56 40 00 mov dword ptr ds [00405668h],eax 00401066 6A 00 push 0 00401068 E8 4C 14 00 00 call 004024B9 0040106D A3 6C 56 40 00 mov dword ptr ds [0040566Ch],eax 00401072 6A 00 push 0 00401074 E8 40 14 00 00 call 004024B9 00401079 A3 70 56 40 00 mov dword ptr ds [00405670h],eax 0040107E 6A 00 push 0 00401080 E8 34 14 00 00 call 004024B9 00401085 A3 74 56 40 00 mov dword ptr ds [00405674h],eax 0040108A 6A 00 push 0 0040108C E8 28 14 00 00 call 004024B9 00401091 A3 78 56 40 00 mov dword ptr ds [00405678h],eax 00401096 6A 00 push 0 00401098 E8 1C 14 00 00 call 004024B9 0040109D A3 7C 56 40 00 mov dword ptr ds [0040567Ch],eax 004010A2 6A 00 push 0 004010A4 E8 10 14 00 00 call 004024B9 004010A9 A3 80 56 40 00 mov dword ptr ds [00405680h],eax 004010AE 6A 00 push 0 004010B0 E8 04 14 00 00 call 004024B9 004010B5 A3 84 56 40 00 mov dword ptr ds [00405684h],eax 004010BA 6A 00 push 0 004010BC E8 F8 13 00 00 call 004024B9 004010C1 A3 88 56 40 00 mov dword ptr ds [00405688h],eax 004010C6 6A 00 push 0 004010C8 E8 EC 13 00 00 call 004024B9 004010CD A3 8C 56 40 00 mov dword ptr ds [0040568Ch],eax 004010D2 6A 00 push 0 004010D4 E8 E0 13 00 00 call 004024B9 004010D9 A3 90 56 40 00 mov dword ptr ds [00405690h],eax 004010DE 6A 00 push 0 004010E0 E8 D4 13 00 00 call 004024B9 004010E5 A3 94 56 40 00 mov dword ptr ds [00405694h],eax 004010EA 6A 00 push 0 004010EC E8 C8 13 00 00 call 004024B9 004010F1 A3 98 56 40 00 mov dword ptr ds [00405698h],eax 004010F6 6A 00 push 0 004010F8 E8 BC 13 00 00 call 004024B9 004010FD A3 9C 56 40 00 mov dword ptr ds [0040569Ch],eax 00401102 6A 00 push 0 00401104 E8 B0 13 00 00 call 004024B9 00401109 A3 A0 56 40 00 mov dword ptr ds [004056A0h],eax 0040110E 6A 00 push 0 00401110 E8 A4 13 00 00 call 004024B9 00401115 A3 A4 56 40 00 mov dword ptr ds [004056A4h],eax 0040111A 6A 00 push 0 0040111C E8 98 13 00 00 call 004024B9 00401121 A3 A8 56 40 00 mov dword ptr ds [004056A8h],eax 00401126 6A 00 push 0 00401128 E8 8C 13 00 00 call 004024B9 0040112D A3 AC 56 40 00 mov dword ptr ds [004056ACh],eax 00401132 6A 00 push 0 00401134 E8 80 13 00 00 call 004024B9 00401139 A3 B0 56 40 00 mov dword ptr ds [004056B0h],eax 0040113E 6A 00 push 0 00401140 E8 74 13 00 00 call 004024B9 00401145 A3 B4 56 40 00 mov dword ptr ds [004056B4h],eax 0040114A 6A 00 push 0 0040114C E8 68 13 00 00 call 004024B9 00401151 A3 B8 56 40 00 mov dword ptr ds [004056B8h],eax 00401156 6A 00 push 0 00401158 E8 5C 13 00 00 call 004024B9 0040115D A3 BC 56 40 00 mov dword ptr ds [004056BCh],eax 00401162 6A 00 push 0 00401164 E8 50 13 00 00 call 004024B9 00401169 A3 C0 56 40 00 mov dword ptr ds [004056C0h],eax 0040116E 6A 00 push 0 00401170 E8 44 13 00 00 call 004024B9 00401175 A3 C4 56 40 00 mov dword ptr ds [004056C4h],eax 0040117A 6A 00 push 0 0040117C E8 38 13 00 00 call 004024B9 00401181 A3 C8 56 40 00 mov dword ptr ds [004056C8h],eax 00401186 6A 03 push 3 00401188 6A 03 push 3 0040118A 6A 03 push 3 0040118C 6A 03 push 3 0040118E FF 15 9E 31 40 00 call dword ptr ds [0040319Eh] 00401194 E8 EE 10 00 00 call 00402287 00401199 33 C0 xor eax,eax 0040119B 5D pop ebp 0040119C C3 ret 0040119D 81 EC 00 00 00 00 sub esp,0 004011A3 55 push ebp 004011A4 8B EC mov ebp,esp 004011A6 53 push ebx 004011A7 56 push esi 004011A8 57 push edi 004011A9 FF B5 08 00 00 00 push dword ptr [ebp+00000008h] 004011AF 6A 00 push 0 004011B1 FF 35 30 50 40 00 push dword ptr ds [00405030h] 004011B7 FF 15 6E 31 40 00 call dword ptr ds [0040316Eh] 004011BD 5F pop edi 004011BE 5E pop esi 004011BF 5B pop ebx 004011C0 8B E5 mov esp,ebp 004011C2 5D pop ebp 004011C3 83 C4 00 add esp,0 004011C6 C2 04 00 ret 4 004011C9 81 EC 04 00 00 00 sub esp,4 004011CF 55 push ebp 004011D0 8B EC mov ebp,esp 004011D2 53 push ebx 004011D3 56 push esi 004011D4 57 push edi 004011D5 6A 00 push 0 004011D7 6A 04 push 4 004011D9 8B C5 mov eax,ebp 004011DB 05 04 00 00 00 add eax,4 004011E0 50 push eax 004011E1 FF 15 86 31 40 00 call dword ptr ds [00403186h] 004011E7 FF B5 0C 00 00 00 _push dword ptr [ebp+0000000Ch](以下略) こんな事になる。 自分のつくた部分はどこだろう? 正解は00401186hから5行である。 先頭からアセンブラが記述されていないのは、COFF形式のEXEファイルに従っている為セクションが異なる。 ab4は直接EXE形式を出力するコンパイラで、実行形式はMicrosoftのCOFF形式のEXEファイルである。 ここに示されているアドレス0x4011E0等は、VirtualAddressで物理アドレスではない。 Windowsは仮想記憶をサポートしているので、出力される実行形式のアドレスは仮想記憶を介している点に注意。 ab4の出力を良く観察すると、変数や関数の引数はすべてスタック操作が関与している事が伺える。 従ってBASICの式や構文上に現れる変数の取り扱いは、実際のCPUレベルでは主記憶メモリに置かれたスタック に記録されているという事。 これはBASICのコードがコンパイルされる際に、一旦中間言語にコンパイルされ、コードジェネレータが x86のアセンブラを生成する事と関係しているかもしれない。 なお、変数をスタックに配置する方法は一般的に行われる。 変数に代入/参照する際にはやや煩雑なスタック操作が生成されるため、命令が重複したアセンブラコードが出力されている。 最適化は行われていない様子。 山本大輔著 x86系CPUのネイティブコードを解析する 最適化手法 ループ内で計算結果が変わらないものは外に出す ループ回数を減らす 分岐を減らす 並列化 SIMD Cでコードを書いてDLにする。 #include emmintrin.h enum {ADD=0,SUB,MUL };void _stdcall simd(int *r0, int *r1, int mode){__m128i m[2];m[0] = _mm_loadu_si128((__m128i*)r0);m[1] = _mm_loadu_si128((__m128i*)r1);switch (mode) {default break;case ADD m[0] = _mm_add_epi32(m[0], m[1]);break;case SUB m[0] = _mm_sub_epi32(m[0], m[1]);break;case MUL m[0] = _mm_mul_epu32(m[0], m[1]);break;}_mm_storeu_si128((__m128i*)r0, m[0]);return; } これをABで呼び出す。 #N88BASICDeclare Sub simd Lib"s2.dll"(r0 As *Long, r1 As *Long,mode As Long)EnumADDi = 0SUBiMULiEnd EnumDim r0[3] As Long,r1[3] As LongDim n As LongFor n=0 To 3r0[n] = n+1r1[n]=r0[n]*10Nextsimd(r0,r1,ADDi)For n=0 To 3Print r0[n];" ";NextPrintsimd(r0,r1,SUBi)For n=0 To 3Print r0[n];" ";NextPrintsimd(r0,r1,MULi)For n=0 To 3Print r0[n];" ";NextPrint またはメモリ上の機械語プログラムの応用でABに組み入れてもいいかも
https://w.atwiki.jp/ninjatrader/pages/50.html
(Play Video) ストラテジーの最適化を通して入力パラメーターを微調整することができる。最適化は、ヒストリカル・テストの実施期間に渡る最適な入力値を決定するためのバックテストの繰り返しを通し、最も良い結果を基準にして、入力値の範囲をテストするプロセスである。 最適化を実施するために必要なものは以下の通り: ヒストリカル・データへのアクセス 独自のNinjaScriptストラテジー * ストラテジー・アナライザーのバックテスト機能の理解 * NinjaTraderと共にインストールされている、いくつかの定義済みのサンプル・ストラテジーがある。 + 最適化の実施方法 最適化の開始 最適化を実行するには: 単一の銘柄またはInstrument List(リスト中の全銘柄で最適化を行う場合)の上で左クリックした後、右クリックして右クリックメニューを表示する。その右クリックメニュー上で Optimize... 項目を選択する。この操作の代わりに、 ストラテジー・アナライザー のツールバーにある" o "アイコンをクリックしても良い。デフォルトのホット・キーである CTRL + O を使用することもできる。 滑り出してくるメニュー上の Strategy 項目で最適化対象のストラテジーを選択する。 最適化のプロパティを設定し、 OK ボタンをクリックする。(各プロパティの定義については下の "最適化のプロパティの理解" 項目を参照すること) テスト範囲の設定 次に挙げるサブ・パラメーターを表示するために、ストラテジーの入力パラメーター部を展開することができる: Min.value - テストを開始する値 Max.value - テストを終了する値 Increment - それぞれの最適化段階で開始値から増やしていくための増分値(段階値) 上の画像では、入力パラメーター"Fast"は開始値(初期値)10、終了値30、増分値1を持つ。これはまず開始値10でテストされた後、11、12というように進み、30まで続く。入力パラメーター"Slow"は開始値6、終了値16、増分値1を持つ。これらの設定に基づき、最良の結果が得られる最適な入力値の組み合わせを見つけるために、合計200回("Fast"向けの値の数20と"Slow"向けの値の数10を掛け合わせた値)のバックテストの繰り返しが処理される。 最適化基準の設定 最適化処理はあなたが選択した最適化基準に基づいて行われる。"Optimize on..."プロパティを"Max. net profit"に設定した場合、オプティマイザー(最適化器)はできるだけ利益が最大になる最適な入力値を探す。最適化基準は10を超える種類の中から選択することができる。詳細は下の "最適化のプロパティの理解" 項目を参照すること。 最良の最適化結果 一度、最適化処理が完了したら、"Instruments"タブと"Optimizer"タブを確認する。"Instruments"タブは、最適化用途に選択された個々の銘柄に対する最良の最適化結果を表示する。それぞれの結果の行を選択することで、その銘柄の成績データを表示する。 上位の最適化結果 Optimizer タブは Optimizer ダイアログ・ウインドウ中の"Keep best # results"プロパティに設定された値に基づいて、上位の結果を表示する。 Parameters 列に最適化された入力値を表示する。 この最適化で使用された入力パラメーター"Fast"の最適化値 この最適化で使用された入力パラメーター"Slow"の最適化値 + 最適化のプロパティの理解 最適化のプロパティ 下で解説する最適化に特有のプロパティは別として、最適化のためのプロパティはバックテストのプロパティ・ウインドウの中のそれと全く同じである。その詳細はストラテジーのバックテストページの "バックテストのプロパティの理解" の項を参照すること。 最適化 特有のプロパティは次の通り: Aggregated Trueに設定された場合、NinjaTraderは銘柄のバスケット全体としての最適化結果を見つけようと試みる。その集合体としての結果は、"Instruments"タブのCOMBINEDという行に表示される。(このパラメーターは最適化対象としてInstrument Listが選択された時にのみ有効になる) Keep best # results 表示する上位の結果の個数 Optimize data series Trueに設定した場合、Data Series Valueプロパティが有効になる (Period TypeのKagi、PointAndFigureおよびLine Break periodはサポートしない) Optimize on... 最適化基準 Optimizer 使用する最適化アルゴリズム。NinjaTraderには最適化アルゴリズムとして"Default"と"Genetic"が付属している。"Genetic"オプションが選択された場合、"Keep best # results"プロパティの上に遺伝的アルゴリズム最適化向けのプロパティ欄が現れる。NinjaScriptによってユーザー独自の最適化アルゴリズムをプログラムすることができる。
https://w.atwiki.jp/isoroku_be/pages/135.html
情報 作者名:fuji、五十六 引用元:なでしこプログラム掲示板「ソース高速HTML化」 勝手に改変 概要 ソースを最適化します。 具体的にはこんな変化があります。(↑が変化前 ↓が変化後) 「てすてす」 (『てすてす』) 「あいうえお{変数A}かきくけこ」。 (『あいうえお』 (変数A) 『かきくけこ』)。 これの作成にあたってfujiさんの★ソース高速HTML化を参考にさせて頂きました。 というかほとんど流用です。ごめんなさい。 解説 ※最適化の効果を確認してみるプログラム 引用+改変:なでしこプログラム掲示板「メモリ不足??」ツリーより 焼きそばさんの検証プログラム ほげほげ=「hoge ほげ ホゲ」。 A=システム時間。 100000回 親回数=回数 TEMP=「{母艦パス}てすてす{ほげほげ[0]}」。 もし、回数%1000=0ならば母艦のタイトルは回数。 A=システム時間-A。 「最適化前 {A}」を表示。 A=システム時間。 100000回 親回数=回数 TEMP=母艦パス 「てすてす」 ほげほげ[0]。 もし、回数%1000=0ならば母艦のタイトルは回数。 A=システム時間-A。 「最適化後 」 Aを表示。 引数 ソース:ソース本文(≠.nakoへの絶対パス) 返り値 最適化されたソース サンプルプログラム A=(「.nako」のファイル選択)を開く。 A=Aをソース最適化。 Aを言う。 //本体 ●ソース最適化(ソースを|ソースの) 定数 文字列色は"#000080" # CR=CHR(13) //「"”『``{{・/*##// ’※ 囲み文字=`「 " ” ` "『 ` `" ` { { /* ・ # # // ’ ※` 閉じ文字=`」"”` "』``" `}}`#*/ 囲み文字数=要素数(囲み文字)。 最初部分=「」 (ソース!=『』)の間 最小文字数=文字数(ソース) 番号=-1 囲み文字を反復 ソースで対象が何文字目。 もし、(それ 最小文字数)かつ(それ 0)なら 最小文字数=それ。 番号=回数-1 次囲み文字=対象。 #関数を探す 「●{~}■{~}*」を反復 ソースを"^\t* * *{対象}"で正規表現マッチ。 それ=それ\0。 もし、(それ 「」)かつ(何文字目(ソース,それ) 最小文字数)なら 番号=囲み文字数+回数-1 次囲み文字=対象。 #次の囲み文字を言う。 もし、番号=-1なら、抜ける。#囲み文字が見つからなかった場合。 ソースの次囲み文字までを切り取る。 最初部分=最初部分 それ。 #囲み文字に応じて切り取り もし、番号 =9ならば もし、番号 =8ならば、 もし、番号=8ならば 次閉じ文字="*/" 違えば 次閉じ文字=MID(閉じ文字,番号+1,1) 違えば、 もし、(何文字目(ソース," ")) (何文字目(ソース,改行))ならば 次閉じ文字=" " 違えば 次閉じ文字=改行。 違えば、次閉じ文字=改行 もし、次閉じ文字=改行なら、 ソースの改行までを切り取る。 切り取り部分=「{次囲み文字}{それ}」 ソース=改行 ソース 違えば、 ソースの次閉じ文字までを切り取る。 切り取り部分=「{次囲み文字}{それ}{次閉じ文字}」。 もし、番号 6なら //ここから文字列 文字列判定=切り取り部分の1から1文字抜き出す。 もし、(文字列判定=『「』)ならば 切り取り部分=切り取り部分の『{』を`』 (`に置換。 切り取り部分=切り取り部分の『}』を`) 『`に置換。 切り取り部分=切り取り部分の『{』を`』 (`に置換。 切り取り部分=切り取り部分の『}』を`) 『`に置換。 切り取り部分の1から1文字削除。切り取り部分=`(『` 切り取り部分。 切り取り部分から1文字右端削除。切り取り部分=切り取り部分 `』)`。 切り取り部分=切り取り部分の` 『』 `を空に置換。 切り取り部分=切り取り部分の`『』 `を空に置換。 切り取り部分=切り取り部分の` 『』`を空に置換。 もし、(切り取り部分の1から2文字抜き出す=「((」)かつ(切り取り部分から2文字右部分=「))」)ならば 切り取り部分の1から1文字削除。切り取り部分から1文字右端削除。 もし、(文字列判定=『"』)ならば 切り取り部分=切り取り部分の『{』を『` (』に置換。 切り取り部分=切り取り部分の『}』を『) `』に置換。 切り取り部分=切り取り部分の『{』を『` (』に置換。 切り取り部分=切り取り部分の『}』を『) `』に置換。 切り取り部分の1から1文字削除。切り取り部分=『(`』 切り取り部分。 切り取り部分から1文字右端削除。切り取り部分=切り取り部分 『`)』。 切り取り部分=切り取り部分の『 `` 』を空に置換。 切り取り部分=切り取り部分の『`` 』を空に置換。 切り取り部分=切り取り部分の『`` 』を空に置換。 もし、(切り取り部分の1から2文字抜き出す=「((」)かつ(切り取り部分から2文字右部分=「))」)ならば 切り取り部分の1から1文字削除。切り取り部分から1文字右端削除。 最初部分=最初部分 切り取り部分。 完成文=最初部分 ソース。 完成文を戻す。 WinAPI利用してるとソースがむちゃくちゃになるかも・・・いずれ直します -- 管理人 (2009-01-06 22 27 21) http //www.example.com エラー -- http //www.example.com (2010-01-21 18 27 57) 名前 コメント
https://w.atwiki.jp/wiki9_kid/pages/26.html
抵抗系最適化計画 レッドストーン世界にネクロマンサーが登場してからずいぶん日が経ちます。 ネクロマンサーのスキルには特に強力な無力化スキルがあります。 しかし装備品でなんとかカバーできる部分も少なくありません。 そこで硝子独自企画として、Mギルド員の抵抗系を改善&最適化しようと思います。 私を介してギルド員同士の抵抗系不足分、過剰分を均一化し あまりコストをかけず最適化していこうと思います。 流れとしては以下の通りです。 【いままでの抵抗装備と知恵カリスマなどの値を申告】 ↓ 【元のアイテムを含めた最適化された装備を提案】 ※その際 自分で探してもらう物をアドバイスすることがあります ↓ 【最適化後要らなくなった装備を私に渡す】 ※勿論不要な物だけでOKです ↓ 【以下同じように別のギルド員を最適化】 協力お願いします。 2008/3/10硝子
https://w.atwiki.jp/docomoemu/pages/23.html
ビルドしただけでは本来の性能を十分に発揮できません。 そのため最適化を行うことを推奨します。 また最適化を行うことで、iアプリのサイズ自体も小さくなります。 必要なソフト ProGuard javaのプログラムを軽量化、最適化、 難読化するフリーソフト 7Zip 圧縮率が非常に高いフリーソフト 準備 下記2ファイルを用意します。 NemulatorPlusの部分は利用するアプリ名に変更してください。 proguard設定用ファイル proguard.txt -injars NemulatorPlus.jar -libraryjars ..\..\..\lib\classes.zip -libraryjars ..\..\..\lib\doja_classes.zip -outjars proout.jar -keep public class App 必要なのはここまで。 以下はうまくいかないときに追加するといい -dontoptimize バッチファイル 問題ありだと思うので、NemulatorPlusNのをそのまま使ったほうがいいかもしれません。 proguard.bat @ECHO OFF 各種設定項目(プロジェクト名やインストールしたパスに従い、変更して下さい。) SET PROJECT_NAME=NemulatorPlus SET JAVA_HOME=C \j2sdk1.4.2_16 SET ZIP_HOME=C \Program Files\7-Zip SET PATH=%JAVA_HOME%\bin;%ZIP_HOME%;%PATH%; File and Folder Check IF NOT EXIST %PROJECT_NAME%.jar GOTO error1 IF NOT EXIST %JAVA_HOME% GOTO error2 IF NOT EXIST proguard.jar GOTO error3 TO Optimize ECHO ON REM PROGUARD java -jar proguard.jar @proguard.txt move /Y proout.jar %PROJECT_NAME%.jar REM PREVERIFY ..\..\..\bin\preverify -classpath ..\..\..\lib\classes.zip;..\..\..\lib\doja_classes.zip %PROJECT_NAME%.jar move /Y output\%PROJECT_NAME%.jar . REM 7Zip mkdir output cd output jar xvf ..\%PROJECT_NAME%.jar del ..\%PROJECT_NAME%.jar 7z u -tzip -mx=9 ..\%PROJECT_NAME%.jar * %PROJECT_NAME%\* cd .. rmdir /S /Q output ECHO 完了 PAUSE NUL EXIT /B 0 エラー処理 error1 ECHO %PROJECT_NAME%.jarが見つかりません。 PAUSE NUL EXIT /B 1 error2 ECHO %JAVA_HOME%フォルダが見つかりません。 PAUSE NUL EXIT /B 2 error3 ECHO proguard.jarが見つかりません。 PAUSE NUL EXIT /B 3 注意点 1.iアプリソースフォルダは"C \iDKDoJa●●(dojaのバージョン)\apps"フォルダ内に入れてください。 2.ビルドが完了していないとできません。 手順 1.7-zipをインストールし、proguard.jarと準備で作ったファイルをbinフォルダに入れる。 2.proguard.batを実行し、しばし待ちます。 3.完了するとjarサイズが小さくなるので、jamファイルをメモ帳などで開き、 "AppSize"の欄にある数字を小さくなった数字に変更する。 4.アプリをアップロードし、正常に動くことを確認し完了 参照元 携帯Javaアプリ最適化 NemulatorPlusN SoftBank S!アプリ
https://w.atwiki.jp/bousoku/pages/408.html
最適化
https://w.atwiki.jp/waretada/pages/251.html
前提 事前 ディスククリーンアップ デフラグ 仮想メモリ設定 Vista・7のグラフィック遅延(GeForceシリーズのみ)Windows Aeroを無効にする ビデオカードドライバの設定(コントロールパネル)で"レンダリング前最大フレーム数"を"0"に設定する 天上碑開発による ログ調査のログ採取方法 IEブラウザキャッシュクリア ゲームとは直接関係ない部分なので大雑把です。 前提 自己責任でお願いいたします。 更に、詳しい方の相談を受けながら実施する事をお勧めします。 事前 やってみて ゴミ箱は空にすべし ディスクトップにできるだけアイコン・フォルダ・ファイルをおかない 常駐ソフトはできるだけ切るべし 1003b_jpn以下 Dump ~NWTemp をフォルダごと削除 天上裏を利用し、chatlogをまとめる。もしくは不要なログを削除(C \GameOn\Chatlog\) できれば(上級) バイバイワトソン君 my DocumentはDドライブに。 メモリ最適化 レジストリ最適化 (笑) ネットワーク環境をルータ・スイッチを Gbit以上の環境に(ケーブルモネ)。ハブをかまさない。 空フォルダをできるだけ削除(消してはいけない空フォルダが存在します) 重複ファイルの統一化 天上碑実体のRAMへの突っ込み ディスククリーンアップ not found (cleanup.jpg) 【スタート】⇒【ファイル名を指定して実行】 「cleanmgr」と打ち、「ok」を押す。 ※【スタート】⇒【すべてのプログラム】⇒【アクセサリ】⇒【システムツール】⇒ディスクのクリーンアップ でも同様。 基本、(C )を選択。 OSの入っているドライブを選択。 削除するファイルを選択。私の場合はすべてにcheck入れてます。 「ok」を選択 ※なぜ必要? PCは一時的にファイルを作成し、次の動作に備えたりします。必要なくなれば自動で削除されるのですが、 削除されないこともあります。ゴミといわれるものです。ずっと起動してるとちりも積もれば山となり、 逐一無駄な一時ファイルを読み込む為遅くなってしまいます。なので消します。 デフラグ ボリュームを最適化して、コンピュータをより速く、効果的に動作させます。 windows XPまでのPCが対象です。7・Vistaは毎日自動でしてくれるので必要ないです。 【スタート】⇒【ファイル名を指定して実行】 「dfrg.msc」と打ち、「ok」を押す。 ※【スタート】⇒【すべてのプログラム】⇒【アクセサリ】⇒【システムツール】⇒ディスクデフラグ でも同様。 基本、(C )を選択。 ※usbなどでつながれた、USBメモリスティックなど、フラッシュメディアに対しては実施しないでください。 「最適化」をクリックし、終了を待つ。 ※尚、(C )の列の右側、「空き領域の割合」が 20%以下の場合、PC内で自身が不要なファイルを早急に削除してください。 ※なぜ必要? ハードディスクはCDのように、円盤上にデータを記憶します。CDは内側から、windowsのハードディスクは外側から記憶していきます。 順番にデータを読み込んでいくために、アクセス速度を早くするためには、windowsでは、データを外側に集める必要があります。 さらに、データは一部、とびとびに記憶されている場合があります(断片化といいます)。途中まで読みこんで、さらに探しに行くのが無駄な動作となります。 デフラグは、データの断片化を修正し、外側から順番に並べなおします。 仮想メモリ設定 PCによって、値が変わりますので自己責任で。 仮想メモリが足りませんと怒られたり特別な事情がある場合のみ実施する事をお勧めします。 【スタート】⇒【ファイル名を指定して実行】 「control sysdm.cpl」と打ち、「ok」を押す。 ※「マイコンピュータ」を右クリック⇒「プロパティ」を選択して同様。 「全般」タブ内の「コンピュータ」内の ○○○ GHz、■■■ GB RAM の ■■■を 覚えておく。 「詳細設定」タブ内の「パフォーマンス」内の「設定」を選択 「詳細設定」タブ内の「仮想メモリ」内の「変更」を選択 ■■■が3.0Gを超えている場合、 ページングファイルなし に設定した方がいいかもしれません。 それ以下の場合は ■■■*1.5倍 例 3.00*1.5 = 4.5 上記の値を覚えときます。 単位が2の累乗になるので、、、 512、1024、2048、4096、8192、16384・・・・ 上記例では、4.5を覚えているので それを1000倍で 4500 カスタム サイズ 部分に 4500にいちばん近い数字を入力します 「初期サイズ」 4096 「最大サイズ」 4096 「設定」を押し「ok」 再起動が必要になります。 ここでのポイントは、「同じ値にして断片化を防ぐこと」に目的を置いています。 OSドライブ以外に作成することも可能です。 例 C を ページングファイルなしにして、D にカスタムサイズを4096で指定する。 カスタムサイズの詳細な入力値は、別途紹介されているサイトをご覧ください。 サイズは物理メモリの2.5倍まで設定することができます。 実際は、タスクマネージャでコミットチャージを監視し、最大値の上乗せで制限値をかけます。 最大値が合計を大きく超えている場合、スワップ・イン、スワップ・アウトによるPCのパフォーマンス低下が大きくなるので、物理メモリを増設する方がいいです。 私が説明する場合、メンドクサイノデ… モトイ、 メモリの3倍の数値突っ込んで って軽く言います。余剰分は、無視されます。(ホントハ チョット ムダ) ※なぜ必要? 物理メモリとは、PCが人だとすると!?常に持ち歩いてる、手帳です。CPUは脳といわれます。ハードディスクは、その人の家の本棚の本!?・・・。ちょっとぶっ飛びすぎですが。仮想メモリを使用するということは、物理メモリだけでは補いきれない部分を、ハードディスクの領域を使って、物理メモリと同様の動作をさせるということです。倉庫利用符みたいなものでしょうか・・・。すこし動作が遅くなります。 Vista・7のグラフィック遅延(GeForceシリーズのみ) Windows Aeroを無効にする ①コンピューター⇒C⇒GomeOn⇒1003b jpn⇒game の「game.exe」を右クリック ②プロパティウィンドウ上の「互換性」タブをクリックします。 出てきたページの「デスクトップコンポジションを無効にする」にチェックを入れ、「ok」 ※フルスクリーンのゲームでも、Aeroを無効にしないと遅延が出る場合があるらしいです。 ビデオカードドライバの設定(コントロールパネル)で"レンダリング前最大フレーム数"を"0"に設定する デスクトップ画面上で右クリックし、「NVIDIAコントロールパネル」を選択。 「3D設定の管理」をクリック 「グローバル設定ページ」の「レンダリング前最大フレーム数」を「0」に設定 「適用」 ボタンを押して完了 ※なぜ必要? 天上碑にとっては、グラフィックボードが頭がよいため、先にデータを覚えて、わざと遅らせて表示して画面の動きをスムーズにします。しかし、天上碑だとかくかくになってしまいます。 最近は動画サイト等でこのアルゴリズムが活発に利用されています。 天上碑開発による ログ調査のログ採取方法 連絡帳で、不具合報告を行うと、運営からログの提出を求められることがあります。 基本的に、2つ。 directX ・・・ 自身のPCスペックが詳細に書かれています。(個人情報はないです) 【スタート】⇒【ファイル名を指定して実行】⇒「dxdiag」と打ちok DirectX診断ツール 内、「情報をすべて保存(S)」をクリック 保存先を選択し、保存 xincodeログファイル ・・・ 内容は暗号化されており読めない たいていの場合 C \GameOn\1003b_jpn\xigncode\xigncode.log 以上二つのファイルを送付することが多いらしい。 ※なぜ必要? いわれるから~ IEブラウザキャッシュクリア 【スタート】⇒【ファイル名を指定して実行】 「inetcpl.cpl」と打ち、「ok」を押す。 IE(インターネットエクスプローラ)を起動し、メニューバーの「ツール」より「インターネットオプション」を選択しても同様 削除を押し、「閲覧の履歴の削除」を選択した後、「削除」をクリック ※なぜ必要? ディスククリーンアップと同様、ゴミがたまります。
https://w.atwiki.jp/tetrismaps/pages/165.html
普通の最適化については「最適化について」のページをご覧いただきたい。 最適化上級者編というのは、用語を使って言うなら横溜めを利用した早い置き方である。簡単にいうならば、反動を利用したさらなる最適化である。 ハードロ操作の最適化修正版(+はかかっている操作の同時処理推奨または必須) このページを見てる大半はぷよテトをやったことあると思うが→長押ししたままハードドロップをした際に早く置ける経験はしたことはないだろうか?いわゆるこれが横溜めである。 言葉だけではわかりづらいのでこの動画を見てほしい。 少しは理解いただけただろうか?? 僕が解説しなおすより、わかりやすい参考サイトを見つけたのでそのサイトのURLとテト譜をはらせてもらう。 最適化上級者編サイト 最適化上級者編テト譜 このページで最適化上級者編について理解してもらえたら幸いです。