Как рассчитать оптимальный размер куска для загрузки больших файлов - PullRequest
12 голосов
/ 09 сентября 2010

Существует ли такая вещь, как оптимальный размер куска для обработки больших файлов? У меня есть служба загрузки (WCF), которая используется для загрузки файлов размером от нескольких сотен мегабайт.

Я экспериментировал с размерами блоков от 4 КБ, 8 КБ до 1 МБ. Большие размеры чанков хороши для производительности (более быстрая обработка), но это происходит за счет памяти.

Итак, есть ли способ определить оптимальный размер куска в момент загрузки файлов. Как можно было бы делать такие вычисления? Будет ли сочетание доступной памяти и пропускной способности клиента, ЦП и сети определять оптимальный размер?

Приветствия

РЕДАКТИРОВАТЬ: вероятно, следует упомянуть, что клиентское приложение будет в Silverlight.

1 Ответ

7 голосов
/ 09 сентября 2010

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

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

Попробуйте размер порции, соответствующий размеру окна TCP / IP вашей сети.Это примерно настолько оптимально, насколько вам действительно нужно получить во время разработки.

...