Windowsアプリケーションで帯域幅調整機能を実装する必要があります。そこSO上の2つのスレッドです:C#のWindowsアプリケーションの帯域幅スロットル
- How to programatically limit bandwidth usage of my c# windows forms application
- Bandwidth throttling in C#
は、しかし、それは、Webアプリケーションのためです。私はWindowsアプリのためにそれが必要です。 Windowsでどのように実装できますか? 上記のリンクをWindowsアプリケーションに使用できますか?ここで
は、私が使用していたコードです:
// Apply bandwidth control
int uploadLimit = GlobalClass.GetFileUploadLimit();
if (uploadLimit > 0)
{
long bps = uploadLimit * 1024;
const int BufferSize = 8192;
MemoryStream mstream = new MemoryStream();//Stream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize);
// Openup source stream.
using (FileStream sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize))
{
// Create throttled destination stream.
ThrottledStream destinationStream = new ThrottledStream(mstream, bps);
byte[] buffer = new byte[BufferSize];
int readCount = sourceStream.Read(buffer, 0, BufferSize);
while (readCount > 0)
{
destinationStream.Write(buffer, 0, readCount);
readCount = sourceStream.Read(buffer, 0, BufferSize);
client.FileUpload(Convert.ToInt16(userId), System.IO.Path.GetFileName(fileName), buffer);
//Webservice: Here is the problem
}
}
}
を上記のコードでは、私はファイルをアップロードするために使用していたWebサービスがあります。このWebサービスは、一度にバイト単位でファイル全体を取得します。この場合、ファイルをチャンクにアップロードすることはできません。誰も私にこれを達成するための何らかの方法を提案することができますか、またはチャンク内のデータを受け入れるためにサービスを変更する必要がありますか?
投稿した2番目のリンクには、ThrolledStreamの例へのリンクがあります。それはあなたのWindowsアプリケーションで動作するはずです。 – akhisp
リンクから同じスロットルクラスを使用しました。上記の私のコードを見てください。 –
あなたはアップロードを行うコードを書きませんでしたが、それが動作する方法を変更するために何もできないことは明らかです。 –