Производительность Winsock closesocket () (локальный компьютер, 127.0.0.1): почему на некоторых компьютерах она так медленная, а на других - сверхбыстрая? - PullRequest
0 голосов
/ 08 октября 2011

Я борюсь с странной проблемой производительности, связанной с закрытием соединений с базой данных в моем коде C #. Мы используем сервер базы данных под названием Raima на локальном компьютере (только локальное TCP-соединение 127.0.0.1 с локальным сервером базы данных на том же компьютере, а не через локальную сеть) через его собственный API Raima (не ADO.NET, а просто .NET). обертка).

Проблема заключается в том, что на многих компьютерах (высокопроизводительных двухъядерных или четырехъядерных компьютерах) закрытие занимает в большинстве случаев около 120-250 мс (например, 120 мс в веб-службе .NET C # и 250 мс в .NET). C # Windows), в то время как на других компьютерах это занимает всего 4 мс (устойчиво). Что меня смущает, так это то, что на некоторых компьютерах это, например, большую часть времени составляет 120 мс, но иногда оно может достигать 4 мс.

Наш поставщик баз данных (Raima) сказал нам, что они ничего не могут с этим поделать, потому что это замедление вызвано методом Winsock closesocket ().

Итак, мой вопрос: правда ли, что Winsock closesocket () может вызывать такие замедления на локальном компьютере? Или это, в конце концов, просто о поставщике базы данных и их медленном драйвере / сервере базы данных?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 мая 2012

Меня зовут Джейсон из Райма .Надеемся, что вы получили наше электронное письмо об этой проблеме еще в 2011 году, но всем, кто столкнулся с этой проблемой производительности, мы объясним, как ее исправить:

Проблема с производительностью была в closesocket (), и объяснили, что мыничего не мог с этим поделать.Сразу же после этого один из наших инженеров обнаружил, что мы использовали опцию SO_LINGER, которая заставляет closesocket () блокировать до отправки всех ожидающих данных перед возвратом.Мы удалили эту опцию и отправили исправление 11 октября 2011 года. Когда SO_LINGER выключен, функция closesocket () будет отправлять ожидающие данные перед закрытием сокета, но может вернуться до завершения этой операции.Патч улучшил производительность в большинстве случаев.

0 голосов
/ 08 октября 2011

Я предлагаю вам протестировать свой райма (как вы его называете), используя инструменты производительности / инструменты стресса; проверить свою сеть с помощью сетевых инструментов; установите свой компьютер, используя другую базу данных (бесплатная версия сервера SQL, IBM DB2, MySQL, Oracle и другие), и попробуйте подключить его и подсчитать его производительность. AFAIK это не реализация winsock, это конфигурация компьютера. Если все базы данных замедлены, так что вы можете заподозрить winsock. Если все медленно, возможно, вы можете упомянуть, чтобы обновить оборудование. Если все, кроме Раймы, быстро. Вы можете подозревать, что база данных raima работает медленно. Если у вас возникли трудности при подключении, как при отключении, как всегда, просто замените кабель локальной сети.

...