Я разрабатываю приложение, которое обрабатывает (обработку видео и т. Д.) И отправляет большие файлы (до десятков гигабайт) по сети. Я отправляю файлы с помощью FTP. Чтобы повысить производительность/потребление памяти приложения, я бы хотел оптимизировать буферы, чтобы я не отправлял слишком большие и фрагментированные пакеты. Проблема в том, что у меня нет большого количества ОЗУ для хранения данных файла во время отправки. В принципе, я читаю достаточно байт с диска, обрабатываю его и сразу отправляю в пункт назначения. В настоящее время я ищу, чтобы реализовать обнаружение пути MTU.Путь MTU Discovery
Я знаком с базовой концепцией, как это сделать. Я хотел бы знать, есть ли какой-либо .NET API в Windows, который отслеживает MTU для адресата?
Я предполагаю, что такой вещи нет, но мой друг сказал мне, что Windows Vista отслеживает.
Я разрабатываю это приложение для Windows XP, но я хотел бы узнать, существует ли такой API отслеживания сети в Windows.
А орехи, IP_GETPMTU были тем, что я искал. Во всяком случае, я установлю свое приложение на использование кусков 64кВ. Мое приложение немного скупилось на память, потому что на самом деле это вторая версия программного обеспечения. Первая версия была написана 10 лет назад и очень разумна с памятью. Поэтому, естественно, я стараюсь быть таким же осторожным. –
Что вы можете сделать с возвращаемым значением из IP_GETPMTU? Размер блока, который вы используете для записи в сокет, имеет очень мало общего с тем, что выходит за провод. Я рекомендую попытаться записать столько данных, сколько у вас есть, и иметь дело с частичной записью. Когда вы можете писать, напишите больше. Указание магического числа, такого как 64kB, глупо; как это имеет значение? Если это так, что происходит, когда размер окна превышает 64 КБ? Конечно, с окнами у вас также есть возможность просто подготовить все и сделать большую асинхронную запись. – janm
@janm: см. Оригинальный вопрос. OP не может записать «столько данных, сколько у вас есть», поскольку данные не будут одновременно помещаться в память. –