初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#26 2022-08-13 14:36:02

himadanee
Guest

Re: While関数の動作について

ああ、#25ので再現できました。
#22で通過してしまってたのは、While内でフィールドを参照せずにその前に別のステップでローカル変数$textに入れてた(#7のスクリプトでやってるような)からでした。(100万文字の場合にフィールド値でなくスクリプトで生成してたので、その流れ)
While変数の初期化でしかフィールドを参照してないように書いているわけですが、そこが別のローカル変数なのかフィールドなのかで違いが出るようです。

単なる推測ですが、
    text = recursive::a1 ;
この場合、textがフィールド値へのポインタか何かになって、そこのアクセスが効率が落ちるんでしょうかね...
(フィールドはタイプが固定されてるが、変数はそうではないから、構造が違う可能性がある)

#27 2022-08-13 14:46:52

himadanee
Guest

Re: While関数の動作について

別のステップで代入しないでも、Whileの中の変数をローカル変数に変えるだけでも、速くなりました。
2か所変更
$text = recursive::a1 ;
    result = Left ( $text ; i ) ;

#28 2022-08-14 13:16:13

koko009
Guest

Re: While関数の動作について

新規の回答に気付かず申し訳ありません。
一部をローカルに変更して
SetRecursion (
While (
[
    $text = recursive::a1 ;
    i = 1;
    result= ""
] ;
  i  <   Length ( $text )+1 ;
[
    result = result & Middle ( $text ; i ; 1) & " " ;
    i = i + 1
] ;
    Left ( result ;i*2-3)
);
Length ( recursive::a1 ))
文字数 処理時間(単位ミリ秒)
100000:3032
300000:45680
500000:172229
1000000:1177144
試験回数が各一回のため正確性に欠ける(また問題の変異点の場合5回平均しても大きい方が速い結果になりPCの状態によって正確性に欠ける状況であったので割愛)が参考のため記させていただきます。
今回の問題はもしかして
「フィールドに 262145 文字以上の下位 ASCII 文字 (256 KB のデータに相当) が含まれる場合、フィールドからグローバル変数を設定する問題が見つかりました。」
https://community.claris.com/en/s/quest … kb-of-data
にも関係が?

#29 2022-08-14 17:42:14

himadanee
Guest

Re: While関数の動作について

FM13v2で修正された問題ですね。
数字は似てますが261245以上なので1文字違ってますし、今回はグローバル変数は使ってないし計算結果の問題ではないので、あまり直接的には関係ないかな。
FM内部のメモリが512KBのものを使ってるらしい点は、関係あるともいえるかな?

この計算式の結果は、またよくわかりませんね。こっちのテストでは
12800:159
51200:1060
102400:3238
204800:10096
262143:26955
262144:27156
30万:411281
261244ちょうどのところは特に「段差」にはなってません、が204800までは2倍あたり3倍ぐらいだったのが262143は1.3倍なのに2.6倍とその間で既に遅くなってるように見えます。30万のところは1桁増えてます。
resultもローカル変数にしてみても変わらないようでした。

i  <   Length ( $text )+1 ;
が無駄かな?初期化変数に入れると
30万:245831
かなり縮んでるがまだ1桁多い

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 7 queries executed - Memory usage: 512.42 KiB (Peak: 519.21 KiB) ]