我有简单的C#线程,有很多属性。财产存活多久,因为我存储了一些数据。
属性可以存活超过1个月并存储数据或者更好地使用数据库。
THX
答案 0 :(得分:4)
理论上,只要变量至少有一个活动引用,变量就会保持活动状态。在您的情况下,只要包含您的属性的对象保持“在范围内”,您的属性的值将保留在内存中。对于静态变量,或者在main()函数中创建或属于Application或Service基础对象的静态变量,只要程序运行,它就会保留在内存中。
然而,一个月是期待一个线程运行的很长时间。如果线程遇到无法处理的错误,它将终止,并且您将丢失线程未持久保存到文件系统或数据库的所有内容。此外,Web应用程序维护在“应用程序池”中,甚至在用户会话的上下文中,应用程序池也可以“回收”,并且只是在内存中闲置的所有内容都将丢失。因此,如果这个数据对于在线程运行后或线程之间保持不变是很重要的,那么在线程进行业务时将其保存在某处。
答案 1 :(得分:3)
只要您的程序可以保持运行超过一个月,数据就会存在。听起来你应该真的使用数据库。如果您断电或需要重新启动服务器进行维护,会发生什么?
答案 2 :(得分:3)
只要您的应用仍然存在,您的媒体资源就会一直存在。应用程序坐在那里一个月是很长的时间 - 我建议使用数据库,如果你想确保你不会丢失数据。
答案 3 :(得分:2)
它们一直处于活动状态,直到它们被垃圾收集 - 因此,如果您的应用程序在接下来的一百年中运行,并且属性仍在应用程序使用范围内,则值将无限期地持续存在。但是,如果您计划长期存储,数据库可能是一个更明智的想法,因为您的值将被删除,例如,如果持久保存值的对象被删除/解构,应用程序停止,错误输出,或者电脑重置等
请记住,数据库可以是持久保存您的值的任何内容,无论是平面文件,分层数据库还是关系数据库。
答案 4 :(得分:1)
线程是执行路径,而不是对象。对象具有可以存储数据的属性。虽然一个线程可以对它们起作用,但对象(及其属性)并不真正存在于 in 线程中。线程可以在应用程序执行过程中进出。垃圾收集器在不再被引用后被对象删除。像这样的代码...
Object o = new Object();
...做两件事1)创建一个对象,2)创建对该对象的引用(o)。如果设置o = null;
,则删除了对该对象的唯一引用,垃圾收集器将很快清除它。应用程序中的所有线程或对象都不会比应用程序本身更长寿;当程序结束执行并且进程空间被破坏时,它们都将被删除。任何需要超过进程的数据都应该存储到文件或数据库表等中。数据可以通过在线程执行的函数之外引用的对象中轻松地超过线程,但它不会比过程