OS が 5MB の最大メモリ使用量を設定する ResourceIntensiveTask 内から 5MB のファイルを POST する必要があります。そのため、ファイルをストレージから直接ストリーミングしようとしていますが、HttpWebRequest に関連付けられているストリームのサイズが大きくなり続けています。これはコードです:
public void writeStream(Stream writer, string filesource, string filename)
{
var store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
var f = store.OpenFile(filesource, FileMode.Open, FileAccess.Read);
store.Dispose();
byte[] buffer = Encoding.UTF8.GetBytes(String.Format(@"Content-Disposition: form-data; name=""file""; filename=""{0}""\n", filename));
writer.Write(buffer, 0, buffer.Length);
buffer = Encoding.UTF8.GetBytes("Content-Type: application/octet-stream\n");
writer.Write(buffer, 0, buffer.Length);
long initialMemory = Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage;
buffer = new byte[2048];
int DataRead = 0;
do
{
DataRead = f.Read(buffer, 0, 2048);
if (DataRead > 0)
{
writer.Write(buffer, 0, DataRead);
Array.Clear(buffer, 0, 2048);
}
} while (DataRead > 0);
double increasedMemory = ((double)Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage - initialMemory) / 1000000;
buffer = Encoding.UTF8.GetBytes("\n--" + boundary + "\n--");
writer.Write(buffer, 0, buffer.Length);
writer.Flush();
}
incrementalMemory デバッグ変数は、ファイルが読み取られて HttpWebRequest にストリーミングされる前後の差分メモリを取得するために使用され、ファイルのほぼ正確なサイズ (5MB) を示します。これは、プロセス メモリが 5MB 増加していることを意味します。
また、 AllowReadStreamBuffering = false をHttpWebRequestに設定しています。
メモリを低く保つ方法は?メモリ使用量の上限が 5MB の場合に大きなファイルをアップロードするにはどうすればよいですか?