стандартный класс является аккуратным контейнером. Я только недавно узнал об этом.
Вместо того, чтобы использовать массив для содержания атрибутов serveral
$person = array();
$person['name'] = 'bob';
$person['age'] = 5;
можно использовать стандартный класс
$person = new stdClass();
$person->name = 'bob';
$person->age = 5;
, Это особенно полезно при доступе к этим переменным в строке
$string = $person['name'] . ' is ' . $person['age'] . ' years old.';
// vs
$string = "$person->name is $person->age years old.";
Джим,
Вы правильно расслышали. Он периодически очищает память с помощью механизма, называемого сборщиком мусора. Вы можете «принудительно» выполнить сборку мусора с помощью вызова, подобного приведенному ниже.
GC.Collect();
Я настоятельно рекомендую вам прочитать эту статью MSDN о сборке мусора .
РЕДАКТИРОВАТЬ 1: «Force» было в кавычках. Чтобы быть более ясным, как был другой плакат, это действительно только предполагает это. Вы не можете добиться того, чтобы это произошло в определенный момент времени. Отсюда ссылка на статью о сборке мусора в .Net
РЕДАКТИРОВАТЬ 2: Я понял, что все здесь только дали прямой ответ на ваш основной вопрос. Что касается вашего второстепенного вопроса. При использовании Visual Studio 2008 Express по-прежнему будет использоваться инфраструктура .net, которая выполняет сборку мусора. Так что если вы когда-нибудь перейдете на профессиональную версию, вы все еще будут иметь те же возможности / ограничения управления памятью.
Редактировать 3: Эта википедия, посвященная финализаторам , дает несколько хороших указателей на то, что уместно делать в финализаторе. Обычно, если вы создаете объект, имеющий доступ к критическим ресурсам, или если вы потребляете такой объект, реализуйте IDispose и / или воспользуйтесь оператором using . Использование автоматически вызовет метод Dispose, даже если возникнут исключения. Это не значит, что вам не нужно давать подсказку финализаторам выполнения ...
повторно создайте объект, имеющий доступ к критическим ресурсам, или, если вы используете такой объект, реализуйте IDispose и / или воспользуйтесь оператором using . Использование автоматически вызовет метод Dispose, даже если возникнут исключения. Это не значит, что вам не нужно давать подсказку финализаторам запуска ... повторно создайте объект, имеющий доступ к критическим ресурсам, или, если вы используете такой объект, реализуйте IDispose и / или воспользуйтесь оператором using . Использование автоматически вызовет метод Dispose, даже если возникнут исключения. Это не значит, что вам не нужно давать подсказку финализаторам запуска ...Вы не можете заставить C # освободить память, но можете запросить , чтобы CLR освободила объекты, на которые нет ссылок, вызвав
System.GC.Collect();
метод WaitForPendingFinalizers
, который «приостанавливает текущий поток до тех пор, пока поток, обрабатывающий очередь финализаторов, не очистит эту очередь». Хотя вам не нужно его называть.
Как предложили другие, за дополнительной информацией обращайтесь к MSDN .
Возможно, вы захотите посмотреть этот скринкаст ^ с сайта InfoQ.com . Он представляет собой внутреннее устройство сборщика мусора .NET
.
Вы можете заставить сборщик мусора собирать объект, на который нет ссылки, с помощью метода
GC.Collect()
. Документация здесь .