[Notes/Domino] @UserAccess は速度が低下する場合がある
非表示式などで、@UserAccess を使用することは結構あると思いますが、第1引数(サーバー名)に共通名のみの値を渡してしまうと、パフォーマンスが落ちてしまうみたいです。以下に調査結果を記載します。
まず、ページにアクションボタンを5つ作成し、その非表示式を以下のようにします。(ちなみに、こんな書き方をしたのは、管理人ではなく別の人ですよ(^^; )
sv := @Name([CN]; @Subset(@DbName; 1));
db := @Subset(@DbName; -1);
@UserAccess(sv:db; [AccessLevel]) <= "3"
notes.ini に 以下の設定を追加し、NRPCのデバッグログを取得します。
CLIENT_CLOCK=1 DEBUG_OUTFILE={ファイルパス}
ページを表示して、出力されたログが以下のものです。アクションボタン1つあたりにOPEN_DB・CLOSE_DBが行われてしまい、約0.2秒もかかっていることが解ります。
(なんで最初の1個が15msなのかよく解りませんが。)
(9-4 [9]) OPEN_DB(サーバー名!!パス): (Connect to サーバー名: 0 ms) (Exch names: 0 ms)(Authenticate: 0 ms.) (OPEN_SESSION: 0 ms) 16 ms. [134+290=424] (10-4 [10]) GET_UNREAD_NOTE_TABLE: 0 ms. [290+44=334] (11-4 [11]) OPEN_NOTE(REP492574A5:0001E50B-NTFFFF0010,03000400): 0 ms. [48+5492=5540] (12-4 [12]) OPEN_DB(サーバー名!!パス): 15 ms. [134+290=424] (13-4 [13]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14] (14-4 [14]) OPEN_DB(サーバー名!!パス): 219 ms. [134+290=424] (15-5 [15]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14] (16-5 [16]) OPEN_DB(サーバー名!!パス: 203 ms. [134+290=424] (17-5 [17]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14] (18-5 [18]) OPEN_DB(サーバー名!!パス): 203 ms. [134+290=424] (19-5 [19]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14] (20-5 [20]) OPEN_DB(サーバー名!!パス): 203 ms. [134+290=424] (21-5 [21]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14] (22-7 [22]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]
この現象を回避するには、もちろん以下のようにしてあげればOKです。
@UserAccess(@DbName; [AccessLevel]) <= "3"
この場合、NRPCのログは以下のようになり、無駄なOPEN_DBが発行されていないのが解ります。
(24-8 [24]) OPEN_DB(サーバー名!!パス): 0 ms. [134+290=424] (25-8 [25]) GET_UNREAD_NOTE_TABLE: 15 ms. [290+44=334] (26-8 [26]) OPEN_NOTE(REP492574A5:00021244-NTFFFF0010,03000400): 0 ms. [48+5492=5540] (27-10 [27]) CLOSE_DB(REP492574A5:00021244): 0 ms. [14+0=14]
推測するに、ノーツの内部処理で、「サーバー名とパスが同じだったら現在のDBのDBハンドルを使い、違っていたら、DBを開く」みたいな処理になっていて、サーバー名の比較は階層付きの名称が前提になっているのではないか、と思います。(まあ、それはそれで正しい処理だと思いますが。)
この関数に限らず、現在のDBを開くような処理は、階層付きのサーバー名を渡してあげたほうが無難かもしれませんね。
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。