Как освободить память?
Я работаю над приложением, которое использует службы WCF. Эта служба получит вызов от какого-то другого приложения и вернет результат вызывающему абоненту. Ответ здесь находится в форме конкретного объекта, который относится к типу класса.
Когда это приложение дало ответ обратно вызывающему абоненту, даже тогда оно удерживает некоторую память. Поэтому я попробовал разные способы освободить эту память после завершения операции, но она все еще удерживает память. Способы, которыми я пытался решить эту проблему:
Что я уже пробовал:
Я создал один поток, прежде чем вернуть ответ, и вызвал функцию сна в течение 1 минуты. На этот раз сработало. Память уменьшается, и я получаю желаемый результат. это правильный путь?
Я также попытался утилизировать объект ответа в блоке finally, но в этом случае память уменьшается,но я не получил вывод.
Tomas Takac
Почему? Какова ваша мотивация для вмешательства в управление памятью? Вы ведь знаете, что память управляется автоматически в C# / .NET, не так ли?
tishi208
@Tomas Takac
Я знаю, что память управляется автоматически, но я хочу уменьшить размер потребления памяти после завершения операции, чего не происходит, поэтому я попытался дать явный вызов сборке мусора, чтобы решить эту проблему. Я знаю, что это не очень хорошая практика. Если у вас есть какие-либо другие решения, пожалуйста, дайте мне знать
Tomas Takac
Память не нужно освобождать сразу. Растет ли использование памяти с течением времени? Вы подозреваете утечку памяти? Затем вы должны использовать профилировщик памяти, чтобы найти источник проблемы.
Вы хотите сказать, что объект, который вы отправляете через WCF, реализует IDisposable? Я бы избегал этого и использовал класс сообщений POCO для обмена данными. В любом случае вы должны проверить, правильно ли вы реализуете шаблон IDisposable, включая вызов из финализатора.
И последнее, но не менее важное: обновите свой вопрос (через Улучшить вопрос) и добавьте немного кода, чтобы проиллюстрировать вашу проблему.