У меня есть .Net сканер, который работает, когда пользователь делает запрос (поэтому он должен быть быстрым). Он сканирует более 400 ссылок в режиме реального времени. (Это бизнес спросить.)
Проблема: мне нужно определить, является ли ссылка в формате xml (например, RSS или каналы Atom) или HTML. Если ссылка является XML, то я продолжаю обработку, но если ссылка HTML, я могу пропустить ее. Обычно у меня есть 2 xml (s) и 398+ html (s). В настоящее время у меня запущено несколько потоков, но обработка все еще медленная, обычно 75 секунд работает с 10 потоками для 400+ ссылок или 280 секунд работает с 1 потоком. (Я хочу добавить больше тем, но смотри ниже ..)
Проблема, с которой я сталкиваюсь, заключается в том, что я читаю потоки следующим образом:
var request = WebRequest.Create(requestUriString: uri.AbsoluteUri);
// ....
var response = await request.GetResponseAsync();
//....
using (var reader = new StreamReader(stream: response.GetResponseStream(), encoding: encoding)) {
char[] buffer = new char[1024];
await reader.ReadAsync(buffer: buffer, index: 0, count: 1024);
responseText = new string(value: buffer);
}
// parse first byts of reasponseText to check if xml
Проблема в том, что моя оптимизация, чтобы получить только 1024, совершенно бесполезна, потому что, как я вижу, GetResponseAsync в любом случае загружает весь поток.
(Другой вариант, который у меня есть, это искать заголовок ContentType, но это довольно похоже на AFAIK, потому что я все равно получаю контент - в случае, если вы не рекомендуете использовать ОПЦИИ, которые я до сих пор не использовал - и, кроме того, xml может быть неправильно помечен как тип контента (?), и я собираюсь пропустить некоторый контент.)
Если есть какая-то оптимизация, которую мне не хватает, пожалуйста, помогите, так как у меня заканчиваются идеи.
(Я считаю, что оптимизировать этот дизайн можно, распределяя нагрузку на несколько серверов, чтобы я сбалансировал сеть с параллелизмом, но это немного отличается от текущей архитектуры, которую я не могу позволить себе сделать на данном этапе время.)