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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.