【发布时间】:2019-01-30 18:28:40
【问题描述】:
我创建了一个控制台应用程序,我在任务计划程序中将其安排为作业。我的应用程序中有一个类级别的静态变量,下面是示例代码。当我的工作第一次运行时,没问题。当我立即重新运行作业时,我收到“对象引用”错误,因为我在 finally 块中将其设置为 NULL 并在 try 块中执行“sb.clear()” - 静态变量将只初始化一次。
Class Temp
{
public static StringBuilder sb = new StringBuilder();
try
{
sb.clear();
... some code
}
catch
{}
finally
{
sb = null
}
}
我的任务计划程序作业将每 24 小时运行一次。由于我将变量设置为 NULL,这是否会在第一次运行一段时间后被收集起来?这样,当我的作业在 24 小时后第二次运行时,我不会遇到“对象引用”错误(考虑将再次创建静态变量)。
如果我将其设置为 NULL,我想知道静态变量的生命周期是多少,否则我将其设置为 NULL。请澄清。
【问题讨论】:
-
如果这个对象只存在于特定方法的上下文中,每隔一段时间运行一次,那么它不应该存储在静态变量中。它的范围应限于需要它的特定操作。这可以防止您需要知道何时可以使用和不能使用给定变量,并创建错误,就像您显然拥有的错误一样,这些错误涉及在不应该使用变量时使用。如果您在需要时创建它,并在操作完成时让该变量离开范围您就不会出现这样的错误。 GC 不是您的优先事项,工作代码才是。