Есть WebService. В качестве API предоставляет WSDL, на основе которых генерируются модельные объекты и сборка XmlSerializers.
Типов очень много. В момент первого обращения происходит задержка (2-3 секунды) и резкий скачок по памяти (1 Гб), в течении которых происходит "связывание" объектов сериализации. Как это происходит в дебрях .NET Framework представляю довольно смутно.
Проблема возникает, если одновременно запускаются десятки таких процессов. Каждый из них моментально отжирает гигабайт памяти.
Подскажите — как можно минимизировать потребление памяти или вручную запустить инициализацию, предварительно спрятав вызов за мьютексом?
Добавлю, что WSDL очень грязыне, содержат массу Xml-аттрибутов. Разработчик предоставляет специальную утилиту для чистки .cs файлов перед сборкой DLL.
SDK находится в публичном доступе, поэтому, при необходимости, могу скинуть ссылки на WSDL, .CS, и итоговую DLL (без подписи, разумеется).
Но, может быть, кто-нибудь уже сталкивался с подобной ситуацией, или знает как работает связывание XmlSerializer'ов в .NET и может подсказать, в чём может быть проблема и как её решать?
Здравствуйте, LWhisper, Вы писали:
LW>Всем привет.
LW>Есть WebService. В качестве API предоставляет WSDL, на основе которых генерируются модельные объекты и сборка XmlSerializers. LW>Типов очень много. В момент первого обращения происходит задержка (2-3 секунды) и резкий скачок по памяти (1 Гб), в течении которых происходит "связывание" объектов сериализации. Как это происходит в дебрях .NET Framework представляю довольно смутно.
LW>Проблема возникает, если одновременно запускаются десятки таких процессов. Каждый из них моментально отжирает гигабайт памяти. LW>Подскажите — как можно минимизировать потребление памяти или вручную запустить инициализацию, предварительно спрятав вызов за мьютексом?
LW>Добавлю, что WSDL очень грязыне, содержат массу Xml-аттрибутов. Разработчик предоставляет специальную утилиту для чистки .cs файлов перед сборкой DLL.
LW>SDK находится в публичном доступе, поэтому, при необходимости, могу скинуть ссылки на WSDL, .CS, и итоговую DLL (без подписи, разумеется). LW>Но, может быть, кто-нибудь уже сталкивался с подобной ситуацией, или знает как работает связывание XmlSerializer'ов в .NET и может подсказать, в чём может быть проблема и как её решать?
Здравствуйте, Sharov, Вы писали:
S>Гуглить пробовали --- тынц и тынц. Оно?
Непохоже, кмк. LWhisper явно пишет что xmlSerializers уже сгенерены, так что я в лёгком недоумении. Тормоза при первом обращении + стабильно воспроизводится => остаётся или jit, или сторонняя логика при загрузке библиотек. Я бы запустил с mem-профайлером и смотрел бы на что именно уходит время / память. Дальше проще будет.
Здравствуйте, Sinix, Вы писали:
S>Непохоже, кмк. LWhisper явно пишет что xmlSerializers уже сгенерены, так что я в лёгком недоумении. Тормоза при первом обращении + стабильно воспроизводится => остаётся или jit, или сторонняя логика при загрузке библиотек. Я бы запустил с mem-профайлером и смотрел бы на что именно уходит время / память. Дальше проще будет.
Так и поступлю. Показательно, что без чистки .cs от лишних аттрибутов, загрузка вместо нескольких секунд занимает несколько минут. >_>
Re[4]: Binding XmlSerializer'ов приводит к перерасходу памят
Здравствуйте, LWhisper, Вы писали:
LW>Так и поступлю. Показательно, что без чистки .cs от лишних аттрибутов, загрузка вместо нескольких секунд занимает несколько минут. >_>
Хм, а сборки сгенерированные точно подхватились? Вопрос конечно дурацкий, но и поведение 1-в-1 как без них.
Re[5]: Binding XmlSerializer'ов приводит к перерасходу памят
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, LWhisper, Вы писали:
LW>>Так и поступлю. Показательно, что без чистки .cs от лишних аттрибутов, загрузка вместо нескольких секунд занимает несколько минут. >_> S>Хм, а сборки сгенерированные точно подхватились? Вопрос конечно дурацкий, но и поведение 1-в-1 как без них.
Да вот о том же думал, но в списке загруженных модулей значатся.
Могу предположить, что происходит сопоставление на основе аттрибутов сериализуемых сущностей и соответствующих им сериализаторов.
Кстати, всего их 2879 штук. Сборка с сериализаторами весит 8.5 мб.
Re: Binding XmlSerializer'ов приводит к перерасходу памяти при запуске приложени
Хм, большую часть памяти на момент снятия снапшота зажирали вот эти друзья.
Быть может, проблема не в Xml-сериализаторах, а именно в кэше SoapHttpClientProtocol?