ちょっと質問させてください。
今、ファイルの分割アップロードを非同期で行う部分を作成しているんですが
TThread..CreateAnonymousThread内でTIdHttpを使って非同期にアップロードしてますが
TIdHttpにファイルの分割されたStreamを渡す部分でつまずいています。
これに関して、何かヒントや参照URLなどがあればお教えください。
少しプログラムが複雑になったのですが、構成は以下の通りです。
1. アップロード関数のTThread..CreateAnonymousThread内で、既定サイズを超えてると分割アップロード関数を呼ぶ
2. 分割アップロード関数内でTFileStreamをチャンクサイズでTMemoryStreamに分割コピーし、
分割数だけ以下の工程を繰り返す
「非同期」フラグをチェックし
a. 「同期」であればTIdHTTPを使ってアップロードする(逐次)
b. 「非同期」であればTMemoryStreamをTListに保存し、TMemoryStreamを引数にして
非同期アップロード関数を呼ぶ
非同期アップロード関数では、TThread..CreateAnonymousThread内で
引数のTMemoryStreamをサイトにアップロードする
3. 「非同期」の場合、すべてのチャンクの送信が完了したことを確認してTList内のTMemoryStreamを解放する
(注意:ここで言う「非同期」とは、すべての分割分を非同期かつ同時に送信することです)
この方法では、最終的にTList内のStreamをすべて解放しているにもかかわらず、
状況によってTMemoryStreamのメモリリークが発生します。
もしかしたら変数バインディングの影響かもと考えてます。
以上、何か構成自体に問題があるような気がしますが、よろしくお願いします。
申し訳ないです。自分の単純なミスでした。
ネストされたAnonymousメソッドはメモリリークを起こすことがあるってことが頭の中にあって
それに引きずられて、他の部分を客観的に見ることができなくなってたみたいです。
ツイート | ![]() |