C#: Сохранение делегата от сбора мусора (вариант Static No)
-
26-10-2019 - |
Вопрос
В настоящее время я использую статический делегат в классе обертки для C DLL, чтобы избежать того, что делегат, который указывает на небезопасную функцию, собирается собирать.
Это работало нормально, пока у меня сейчас не будет необходимость поддержать несколько экземпляров класса. Обходной путь может состоять в том, чтобы составить список статических делегатов, но я хотел бы найти более простое решение.
Решение
Чтобы объект был собираться, вы должны поддерживать ссылку на него.
Статические участники в статических классах живут для жизни применения.
Например, члены класса, в зависимости от дизайна вашего класса и дизайна проекта, вы можете использовать разные подходы. Поддержание статического списка не может быть плохой идеей.
Мой единственный вопрос заключается в том, как вы можете понять, что делегат собирается. Потому что, если вы можете получить к нему доступ, вы, должно быть, сохранили его ссылку. В этом случае он должен был оставаться в памяти.
Другие советы
Я думаю, что вы допустили ошибку: статические переменные жизни во всем жизненном цикле приложения, они никогда не будут Gced, когда приложение будет запущено.