Re[4]: sockets. memory leak
От: remark Россия http://www.1024cores.net/
Дата: 11.07.05 07:35
Оценка:
Здравствуйте, Игoрь, Вы писали:

R>>А на WinXP sp2 с mfc71 это не поможет!

R>>День искал, почему у тестировщика на машине память утекает, а у меня всё нормально. В итоге обнаружил интересную вещь.
R>>Если выполнить такой фрагмент

R>>R>>AfxSocketInit();


R>>for (int i = 0; i < 10000; ++i)

R>>{
R>> CSocket sock;
R>> sock.Create();
R>> sock.Close();
R>>}
R>>



R>>Программа сьедает 12Мб (!) памяти. На Win2k работает нормально.

R>>
R>>
R>>

И>Стандартный совет: не используйте MFC-шные сокеты. Я не знаю сколько человек должен был выпить накануне,

И>чтобы написать такую херню как CSocket и CAsyncSocket.

И>Теперь по поводу утечки. Это естественно MFC-шная бага, обойти ее можно созданием дополнительного сокета в начале

И>работы приложения и пусть себе висит все время работы.

Я бы и сам не стал вообще MFC использовать
Но проблема в том, что уже есть библиотечка, использующая CSocket. И надо юзать именно её. И всё вобщем то было хорошо, пока не провелили на XP

Вот ещё интересный момент: проверил на той же машине, но под другим пользователем (который не админ), запустил тот же самый exe-шник — память не утекает! Бред какой-то

А по поводу создания одного сокета в начале приложения: ИМХО для серверного приложения — это не очень хорошо. Для устойчивости лучше каждый раз новый соксет создавать и заново открывать соединение.

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.