Как мне освободить объекты в C #

Запрос:

SELECT qb.dy as yourday, COALESCE(count(yourcolumn), 0) as yourcount from yourtable qa 
right join (
    select curdate() as dy    union
    select DATE_SUB(curdate(), INTERVAL 1 day) as dy     union
    select DATE_SUB(curdate(), INTERVAL 2 day) as dy     union
    select DATE_SUB(curdate(), INTERVAL 3 day) as dy     union
    select DATE_SUB(curdate(), INTERVAL 4 day) as dy     union
    select DATE_SUB(curdate(), INTERVAL 5 day) as dy     union
    select DATE_SUB(curdate(), INTERVAL 6 day) as dy        
    ) as qb 
on qa.dates = qb.dy 
and qa.dates > DATE_SUB(curdate(), INTERVAL 7 day)
order by qb.dy asc;

, и результат:

+------------+-----------+
| yourday    | yourcount |
+------------+-----------+
| 2015-06-24 | 274339    |
| 2015-06-25 |      0    |
| 2015-06-26 |      0    |
| 2015-06-27 |      0    |
| 2015-06-28 | 134703    |
| 2015-06-29 |  87613    |
| 2015-06-30 |      0    |
+------------+-----------+
13
задан Pratik Deoghare 9 March 2010 в 05:31
поделиться

8 ответов

Вы можете использовать используя оператор . После этого ссылка на объект будет удалена, и сборщик мусора сможет собрать его позже.

2
ответ дан 1 December 2019 в 19:01
поделиться

У вас нет. Это то, что сборщик мусора делает автоматически - в основном, когда среде выполнения .NET требуется память, она обходит и удаляет объекты, которые больше не используются.

Что вам нужно сделать, чтобы это сработало, так это удалить все ссылки на объект.

В вашем случае ....

obj1 = null;

в конце, тогда объект больше не ссылается и может быть востребован из сборщика мусора.

Вы можете проверить http://en.wikipedia.org/wiki/Garbage_collection_ (computer_science) для получения дополнительной информации.

Обратите внимание, что если объект имеет ссылки на неуправляемые ресурсы (например, открытые файлы и т. Д.), Он должен реализовывать шаблон Disposable (интерфейс IDisposable), и вы должны явно освободить эти ссылки, когда вам больше не нужен объект.

7
ответ дан 1 December 2019 в 19:01
поделиться

Как указал Крис out C # выполняет большую часть сборки мусора за вас. Примеры, в которых вам может потребоваться сборка мусора, связаны с реализацией интерфейса IDisposable и с использованием WeakReference . См. http://msdn.microsoft. .com / en-us / library / system.idisposable.aspx и http://msdn.microsoft.com/en-us/library/system.idisposable.aspx для получения дополнительной информации.

0
ответ дан 1 December 2019 в 19:01
поделиться

Вы перестаете ссылаться на них и позволяете сборщику мусора принимать их.

Если вы хотите освободить объект, добавьте следующую строку:

obj1 = null;

Сборщик мусора, если он свободен, чтобы удалить объект (при условии, что нет другого указателя на объект, который поддерживает его .)

0
ответ дан 1 December 2019 в 19:01
поделиться

Необязательно. Вы просто перестаете ссылаться на них, и сборщик мусора (в какой-то момент) освободит их для вас.

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

7
ответ дан 1 December 2019 в 19:01
поделиться

Как уже упоминалось, вам не нужно явно освобождать их; однако кое-что, о чем не упоминалось, заключается в том, что, хотя это правда, что встроенный сборщик мусора освободит их за вас, нет гарантии, КОГДА сборщик мусора освободит его.

Все, что вы знаете, это то, что когда он выпадает из области видимости, он МОЖЕТ быть очищен сборщиком мусора и на каком-то этапе будет.

0
ответ дан 1 December 2019 в 19:01
поделиться

Вы не должны. Сборщик мусора среды выполнения придет и очистит его для вас. Вот почему вы используете C#, а не неуправляемый C++ в первую очередь :)

18
ответ дан 1 December 2019 в 19:01
поделиться

Это не рекомендуется, но если вам действительно нужно, вы можете принудительно выполнить сборку мусора с помощью:

GC.Collect();
5
ответ дан 1 December 2019 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: