У меня есть Windows DLL, которая предоставляет видео для внешнего приложения. Мое основное приложение создает каждый видеокадр, и я использую глобально разделяемую память, поддерживаемую файлом системной страницы, чтобы передать этот кадр в DLL. Затем видеокадр извлекается внешним приложением и затем отображается. Я не являюсь владельцем внешнего приложения, просто DLL, которую он загружает для получения видео. Я подумываю о переходе на подход, основанный на сокетах, чтобы поговорить между моим основным приложением и DLL и избавиться от подхода с общей памятью. Мне не нравится смотреть, как «мягкие ошибки страницы» накапливаются, поскольку я постоянно делаю недействительным место в общей памяти каждый раз, когда записываю в него новый видеокадр. Я считаю, что ошибки программных страниц безвредны, это всего лишь побочный эффект подкачки памяти, но мне было бы удобнее без него.
Поскольку видео доставляется со скоростью около 25 кадров в секунду, у меня есть примерно 1/25 секунды для передачи кадра. Размеры кадров никогда не превышают 640 x 480, и они представляют собой сжатые кадры JPEG, поэтому они не очень большие, обычно около 10 000 байт. Итак, вот мой вопрос:
С уже открытым и постоянным соединением сокетов между двумя сокетами на одном ПК, будет ли время переноса видеокадра значительно дольше с использованием сокета вместо места в общей памяти? Или на уровне O / S это просто быстрая запись в память с незначительным «оформлением окна» вокруг него для поддержки связи через сокеты?