2010-07-05 180 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

相關問題