2010-07-05 190 views
1

我打算设计一个使用.NET Framework运行很长时间的应用程序(C#或VB.NET)。它可能会重新启动每年甚至更多...长时间运行的应用程序

有什么(使用特殊设计模式左右),我必须关心在设计“长时间运行的应用程序在.NET中”?

.NET是否曾经是这类应用程序的良好平台,或者我应该使用其他平台,如J2SE?

(这不是一个Web应用程序。)

+1

我会专注于保持服务器运行:) – Marko 2010-07-05 19:47:31

+1

它是一个移动应用程序,您将看到它作为替代J2ME。似乎你混淆了事情。另外我会建议检查一下,如果它是Windows,那么你可以在不重新启动的情况下保持服务器运行多年。安装更新和热修复程序后可能需要重新启动。 – Incognito 2010-07-05 19:50:57

+0

谢谢!是的,我的意思是J2SE! – Jalal 2010-07-06 06:29:54

回答

6

其实我要说的是,使用.NET是非常适合长时间运行的应用程序。总的来说,托管代码在这种情况下往往表现得相当好,因为压缩GC有助于防止由于内存碎片随时间而产生的问题。

这就是说,很难给出很多指导,因为问题本身的信息很少。 “每年或更多”的运行时间并不足以说明特定的框架或语言选择会受益 - 任何语言都可以工作,因为长时间运行的应用程序产生的问题往往是更多的设计问题,而更少的框架/语言/工具包/等。我已经编写了一些基于.NET的应用程序,它们作为服务运行并且保持连续运行很长时间,并且从未对应用程序有任何问题(至少与技术本身无关)。

3

.NET的垃圾收集器非常好,所以只要你没有任何不明显的内存泄漏,那应该没问题。 “非显而易见”包括在你真正完成它们时不释放事件处理程序,在其他类中使用lambda表达式来处理事件处理程序等等。

确保您捕获并记录所有未处理的异常。如果它死了,你会想知道为什么。

另外,请看看Windows 7中的应用程序重新启动支持。这可以重新启动您的应用程序,如果它失败。尽管它是为非托管代码编写的,但它可以在Windows 7 API code pack的.net中访问。

5

我不担心让应用程序继续运行,更多的是关于当它不可避免地停止时会发生什么 - 并且没有错误,它会停止。

有很多因素可以出错;崩溃,服务器故障,网络故障或某人简单地停止应用程序。真正的工作将在重新启动后恢复应用程序的任务。

+1

好点。如果高可用性是一个问题,那么复制关键资源可能是一个好主意(因为这个应用程序/服务= - – 2010-07-05 20:11:46

相关问题