Уважаемые,
Есть ASP.NET MVC WEB API проект. Есть метод который принимает объект класса (ну понятно дело клиент передает XML версию этого объекта и WEB API создает сам объект, наполняет его из XML и передает в метод).
Сегодня поставил опыт, передал XML размером примерно 160КB (там изображения закодированые были в Base64).
Пользую Фиддлер для передачи инфы. Так вот, время, между тем как я передал из Фиддлера и когда сработал брекпоинт в начале WEB API метода было больше одной минуты
Это вообще нормально что так медленно это дело все? как то это дело можно ускорить? кто то на работе намекнул как работает DropBox API, там как то по частям вроде передается все..
Если есть опыт поделитесь
Спасибо
WEB API передача большой инфы
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: WEB API передача большой инфы
Это значит что прежде чем передать управление API, сервер прочитал содержимое запроса согласно Content-Length. А канал наверное медленный...shadow7256 wrote:время, между тем как я передал из Фиддлера и когда сработал брекпоинт в начале WEB API метода было больше одной минуты
Или это на локальном сервере?
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: WEB API передача большой инфы
это на локальное машине моей. Да, по умолчанию, прежде чем управление передается в контроллер все содержимое заносится в буфер в память. Но тратить больше минуты чтобы буферизовать 160К данных локально ?
-
- Уже с Приветом
- Posts: 13684
- Joined: 16 Jan 2001 10:01
Re: WEB API передача большой инфы
А если уменьшить размер данных в 2, 10, 1000 раз - задержка пропадает?
CPU занят в это время?
Может это антивирус проявляет бдительность?
CPU занят в это время?
Может это антивирус проявляет бдительность?
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: WEB API передача большой инфы
Если уменьшить размер данных задержка пропадает конечно. Чем меньше данных, меньше задержка.
Как только посылаю большой пакет из Фиддлера то в списке процессов вижу что резко подтягивается msvsmon.exe (жрет порядка 12-15 процентов проца). Как только управление доходит до контроллера то msvsmon.exe "успокаивается".
Как только посылаю большой пакет из Фиддлера то в списке процессов вижу что резко подтягивается msvsmon.exe (жрет порядка 12-15 процентов проца). Как только управление доходит до контроллера то msvsmon.exe "успокаивается".
-
- Уже с Приветом
- Posts: 1665
- Joined: 16 Jul 2009 14:18
- Location: Uganda
Re: WEB API передача большой инфы
У нас для ASP.Net ставили эксперименты по передачи больших данных - по 100-200 мг. В итоге - перетряхнули все возможные варианты и поняли, что придется некий свой буферизатор писать, чтобы сливать с сервера маленькими кусками с буферизацией. Все остальное "штатное" - падает в произвольных местах.
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: WEB API передача большой инфы
походу что то подобное и нам надо будет походу (( Если бы TCP был как транспорт для endpoint то там можно выставить ReceiveMode = Streamed, но для HTTP это не канаетmynameiszb wrote:У нас для ASP.Net ставили эксперименты по передачи больших данных - по 100-200 мг. В итоге - перетряхнули все возможные варианты и поняли, что придется некий свой буферизатор писать, чтобы сливать с сервера маленькими кусками с буферизацией. Все остальное "штатное" - падает в произвольных местах.
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: WEB API передача большой инфы
Мы для похожих задач пользуем стандартный https и libCURL, но у нас на обоих концах свои собственные компоненты в купе с OS specific инфраструктурой. Катали файлы до пары гигабайт, все пучком.
Разок столкнулись с тем, что после очередного апдейта на винде начал вылетать случайный обрыв, пока ковыряли - мелкомягкие выпустили еще апдейт и все рассосалось. Я к тому, что мабыть стоит посмотреть и в эту сторону...
Разок столкнулись с тем, что после очередного апдейта на винде начал вылетать случайный обрыв, пока ковыряли - мелкомягкие выпустили еще апдейт и все рассосалось. Я к тому, что мабыть стоит посмотреть и в эту сторону...
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: WEB API передача большой инфы
Не совсем понял про передачу файлов. Ситуация такая. Есть класс и метод в WEB API который принимает объект этого класса:
я из Фиддлера составляю запрос и посылаю XML версию этого объекта в теле. Ну что то типа:
так вот когда данные в массиве Image небольшие то все быстро.. а если там 160КВ байтов то перед тем как управление перейдет в ImportPerson занимает больше минуты
Code: Select all
[Serializable]
public class Person
{
public string Firstname {get;set;}
public byte [] Image {get;set;}
}
[HttpPost]
public void ImportPerson (Person person)
{
}
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<Person>
<Firstname>Vasya</Firstname>
<Image>asdf79a8s79asdf987asd9879asdf</Image>
</Person>
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: WEB API передача большой инфы
Да, немного не о том подумал.
Судя по такой дикой задержке проблемы на сервисе - либо клинит при буфферизации (типа чего то ждет для выплевывания данных наружу), либо просто банальный сетевой таймаут где-то, там как раз имхо 30 секунд по умолчанию, если ничего не подшаманивать.
Судя по такой дикой задержке проблемы на сервисе - либо клинит при буфферизации (типа чего то ждет для выплевывания данных наружу), либо просто банальный сетевой таймаут где-то, там как раз имхо 30 секунд по умолчанию, если ничего не подшаманивать.
Тупизна как Энтропия. Неумолимо растет.