スクリプトの辞書オブジェクトについては、実際、MS は当初 Python などの動的スクリプト言語を借用してクライアント向けに開発したと思います。この点については、wrox の ASP プログラマーズ リファレンス マニュアルの 137 ページを参照してください。セッション レベルで辞書オブジェクトを保存するとシステムのパフォーマンスが低下しますが、アプリケーション レベルで辞書オブジェクトを保存すると Web サーバーがクラッシュします。これについては詳しく説明しません。
ここで、辞書オブジェクトが 1 ページにある場合にどのような設計上の欠陥があるかを考慮する必要があります。
これを試すことができます
set rs=server.createobject(adodb.recordset)
sql=テーブルから * を選択
rs.open SQL,conn,1,3
set ttt=server.createobject(scripting.dictionary)
ttt.add xxx,rs(フィールド)
rs=何も設定しない
liu=ttt(xxx) 'これを行うと何が見つかりますか? ASP ページには、事故が発生したことが表示されます。 ! !これは非常に驚くべきことです。事故とは何ですか?何とも言えませんが、その後、繰り返しテストした結果、rs(field) の値を辞書オブジェクトに直接与えることができないためであることがわかりました。辞書にはメモリアドレスが格納されているという結論に達しました。この場合、私が今書いたことは間違いなく大惨事です。解決策は、この rs (フィールド) を変数に入れることです。しかし、何も変更されていないオブジェクトを辞書オブジェクトで保存することはできないでしょうか。これは大きな質問なので、このプログラムを再度作成して、try.htm として保存して効果を確認してください。
<script language='vbscript'>
set ttt=createobject(scripting.dictionary)
ttt.add liu、uuu
set ddd=createobject(scripting.dictionary)
ddd.add ppp,ttt
setttt=何もしない
bbb=ddd(ppp)(リュー)
アラート(bbb)
</script>
結果はどうなりましたか?アラート uuu の説明に問題がないことがわかります。これは、ディクショナリ オブジェクトが実際に別のディクショナリ オブジェクトを置き換えることを意味します。
辞書オブジェクト全体が複製され、これにより、ms の開発時に辞書オブジェクトが使用されたという wrox の本に書かれていることをさらに検証できます。
それは実際にはクライアントのためです、それが私が言っていることです。
配列と辞書を組み合わせるコードもお見せします。
<script language='vbscript'>
i=1
写真名=(xxx)
str=set & pic_ & i & =createobject( & & scripting.dictionary & & )
実行(文字列)
str=pic_ & i & .add & & picname & & , & & picname &
実行(文字列)
ディムット()
リディムット(5)
ttt(0)=ううう
pic_1.アイテムを追加しますttt
liu=pic_1(写真名)
set pic_2=createobject(scripting.dictionary)
消して
リディムット(5)
ttt(0)=iii
nnn=pic_1(アイテム)(0)
pic_2.add rrr,ttt
zzz=pic_2(rrr)(0)
警告(劉)
アラート(nnn)
アラート(zzz)
</script>