PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
10709 00/03/15 11:06:16 PB6.5: BlobDataのFileWriteでメモリが開放されない? By じゅに

カテゴリ:スクリプトの記述
日付:2000年03月15日 11:06 発信者:じゅに
題名:PB6.5: BlobDataのFileWriteでメモリが開放されない?

FileRead,FileWrite関数は一度に32765bytesまでしか読み書きできないので、
以下のような関数を作りました。

blob f_file_read(int ai_file_no, long al_file_length)
----------
Long ll_cnt, ll_idx
Blob lbb_buf, lbb_ret

ll_cnt = Ceiling(al_file_length / 32765)
FOR ll_idx = 1 TO ll_cnt
  FileRead(ai_file_no, lbb_buf)
  lbb_ret = lbb_ret + lbb_buf
NEXT

RETURN lbb_ret
----------

f_file_write(int ai_file_no, blob abb_data)
----------
long ll_cnt
long ll_ind

ll_cnt = Ceiling(Len(abb_data) / 32765)

FOR ll_ind = 1 TO ll_cnt
  IF (ll_ind * 32765) - 1 <= Len(abb_data) THEN
    FileWrite(ai_file_no, BlobMid(abb_data, (ll_ind - 1) * 32765 + 1, 32765))
  ELSE
    FileWrite(ai_file_no, BlobMid(abb_data, (ll_ind - 1) * 32765 + 1))
  END IF
NEXT
----------

使用例
----------
ll_len = FileLength(\"big.txt\")
li_fno  = FileOpen(\"big.txt\", StreamMode!, Read!, LockRead!)
lbb_read_buf = f_file_read(li_fno, ll_len)
FileClose(li_fno)

li_fno = FileOpen(\"big.txt\", StreamMode!, Write!, LockWrite!, Replace!)
f_file_write(li_fno, lbb_write_buf)
FileClose(li_fno)
----------

これを使って、Fileの書き込みを何度も行うとプログラム終了までメモリが開放されなく、
メモリ使用量がどんどん増えていきます。
読み込みは何度行っても大丈夫でした。
また、String型の読み書きでは問題ないようです。

PBの問題でしょうか?
PB6.5でClientはNT4でもWin95でも同じでした。


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser InternetExplorer4.X

Server SoftWare

OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.