0

ピア間でファイルを転送するために actionscript p2p アプリケーションを使用しています。受信したすべてのファイル byteArrays は、次のような 1 つの配列に格納されます。

recvFiles[peerID][fileID].data:ByteArray = FileReference.data

今、私はそのような状況で立ち往生しています-誰かが1GBを超えるサイズのファイルを転送することにした場合はどうなりますか. これは、受信機のメモリが目詰まりすることを意味します。

ユーザーがPCに保存した後、保存されたファイルbyteArrayを削除するにはどうすればよいですか?

私はこれについて考えました:

recvFiles[peerID][fileID] = null;

しかし、私はアクションスクリプトの初心者であり、それがメモリとどのように相互作用するかわかりません...

だから私の質問は、メモリをクリアする最良の方法は何ですか?

助けてくれてありがとう!

4

1 に答える 1

1

はい、そうするべきです。公式にはサポートされていませんが、すぐにガベージ コレクションを強制することもできます。これを行うには、LocalConnection を作成します。詳細については、Grant Skinner のブログをご覧ください。

http://gskinner.com/blog/archives/2006/08/as3_resource_ma_2.html

try { 
   new LocalConnection().connect('foo');
   new LocalConnection().connect('foo');
} catch (e:*) {}
// the GC will perform a full mark/sweep on the second call.

Flash Player 10 以降のデバッグ バージョンを使用してテストしている場合は、それを強制することもできます。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/System.html#gc()

System.gc();

...しかし、この 2 番目のオプションはデバッグ バージョン専用であることに注意してください。ほとんどのユーザーはこれをインストールしていません。

于 2013-05-13T14:52:06.787 に答える