2010-10-26 3 views
1

У меня есть простая C# -иниация с множеством свойств. Как долго свойство живет, потому что в свойствах хранятся некоторые данные.Как долго свойство живет

Может быть живым более 1 месяца и хранить данные или лучше использовать БД.

ТНХ

ответ

4

Теоретически переменная сохраняется в памяти, если она содержит хотя бы одну активную ссылку. В вашем случае, пока объект, содержащий ваше свойство, остается «в области видимости», значение вашего свойства сохраняется в памяти. Для статической переменной или одной, созданной в функции main() или принадлежащей базовому объекту приложения или службы, она останется в памяти до тех пор, пока программа запускается.

Тем не менее, в течение месяца существует очень много времени, чтобы ожидать, что поток будет запущен. Если поток сталкивается с ошибкой, которую он не может обработать, он будет завершен, и вы потеряете все, что поток не сохранялся в файловой системе или базе данных. Кроме того, веб-приложения поддерживаются в «пуле приложений», и даже в контексте пользовательского сеанса пул приложений может быть «переработан», и все, что просто зависает в памяти, теряется. Поэтому, если эти данные важны для поддержания после того, как поток запущен, или между потоками, сохраните его где-нибудь, когда ваш поток будет работать по его бизнесу.

2

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

Имейте в виду, что база данных может быть любой, которая сохраняет ваши значения, будь то плоская файловая, иерархическая или реляционная база данных.

3

Пока ваша программа может работать более месяца, данные будут там. Похоже, вы действительно должны использовать базу данных. Что произойдет, если вы потеряете питание или вам нужно перезагрузить сервер для обслуживания?

+0

thx для вашего ответа – senzacionale

3

Ваши объекты останутся в живых, пока ваше приложение останется в живых. Один месяц - это долгое время, когда приложение сидит там - я бы рекомендовал использовать БД, если вы хотите, чтобы вы никогда не теряли данные.

+0

thx для вашего ответа – senzacionale

1

Нить - это путь исполнения, а не объект. Объекты имеют свойства, которые могут хранить данные. Объекты (и их свойства) на самом деле не живут в потоке, хотя нить может действовать на них. Темы могут входить и уходить в процессе выполнения приложения. Объекты удаляются сборщиком мусора после того, как они больше не упоминаются. Код, как это ...

Object o = new Object(); 

... делает две вещи 1) создать объект, 2) создать ссылку на этот объект (O). Если вы установили o = null;, вы удалили единственную ссылку на этот объект, и сборщик мусора вскоре очистит его. Ни один из потоков или объектов в вашем приложении не будет работать дольше, чем само приложение; все они будут уничтожены, когда ваша программа завершит выполнение, и пространство процесса будет уничтожено. Любые данные, которые должны пережить процесс, должны храниться в файле или таблице базы данных и т. Д. Данные могут легко пережить поток, находясь в объекте, на который ссылается вне функции, выполняемой потоком, но она не переживет обработать.

Смежные вопросы