Загрузка ЦП увеличивается до 75% при потоковой передаче файла размером 300 МБ с использованием службы WCF - PullRequest
0 голосов
/ 31 августа 2010

У меня есть служба wcf, которая используется для загрузки файлов.Он работает нормально (наконец-то), но я вижу, что при загрузке загрузка процессора увеличивается примерно на 75%.

Пожалуйста, сообщите

Код клиента

FileTransferServiceClient obj = new FileTransferServiceClient();
Byte[] buffer = new Byte[16 * 1024];
CoverScanZipRequest req = new CoverScanZipRequest(
    new string[] { "1", "2" });

CoverScanZipResponse res = new CoverScanZipResponse();
res = obj.CoverScanZip(req);

int byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length);
Response.Buffer = false;
Response.ContentType = "application/zip";
Response.AddHeader("Content-disposition", 
    "attachment; filename=CoverScans.zip");

Stream outStream = Response.OutputStream;
while (byteRead > 0)
{
    outStream.Write(buffer, 0, byteRead);
    byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length);
}
res.CoverScanZipResult.Close();
outStream.Close();

1 Ответ

1 голос
/ 31 августа 2010

В этой строке:

byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length);

Вы берете несжатые данные, архивируя их на лету. Если так, то это, вероятно, ваша проблема. Сжатие данных может быть довольно интенсивным использованием процессора. В качестве дезагностического теста попробуйте просто отправить необработанные данные в Bowser и посмотреть, снизится ли загрузка ЦП. Если вы выполняете архивирование на лету и отправляете несжатые данные, это снижает нагрузку на процессор, у вас есть 2 реалистичных варианта.

  1. Убедитесь, что у вас достаточно серверной инфраструктуры для этого.

  2. Сжатие файлов в автономном режиме, чтобы их можно было ставить в очередь таким образом, чтобы несколько человек, одновременно обращающихся к службе, не убивали сервер. Затем вы можете сохранить zip-файл во временной папке и отправить пользователю ссылку или аналогичный файл, когда он будет обработан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...