C#: Сохранение делегата от сбора мусора (вариант Static No)

StackOverflow https://stackoverflow.com/questions/4826257

Вопрос

В настоящее время я использую статический делегат в классе обертки для C DLL, чтобы избежать того, что делегат, который указывает на небезопасную функцию, собирается собирать.
Это работало нормально, пока у меня сейчас не будет необходимость поддержать несколько экземпляров класса. Обходной путь может состоять в том, чтобы составить список статических делегатов, но я хотел бы найти более простое решение.

Это было полезно?

Решение

Чтобы объект был собираться, вы должны поддерживать ссылку на него.

Статические участники в статических классах живут для жизни применения.

Например, члены класса, в зависимости от дизайна вашего класса и дизайна проекта, вы можете использовать разные подходы. Поддержание статического списка не может быть плохой идеей.

Мой единственный вопрос заключается в том, как вы можете понять, что делегат собирается. Потому что, если вы можете получить к нему доступ, вы, должно быть, сохранили его ссылку. В этом случае он должен был оставаться в памяти.

Другие советы

Я думаю, что вы допустили ошибку: статические переменные жизни во всем жизненном цикле приложения, они никогда не будут Gced, когда приложение будет запущено.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top