默認情況下,IIS會自動回收的應用程序池的間隔(我想在29個小時左右),但是這確實是由主機,設置再好一點或如何你正在使用的內存很多。回收觸發可以是一個時間間隔,也可以是進程達到某個內存使用限制的時間。我確定任何共享主機都設置了它們。
關於內存使用情況,您可以使用GC.GetTotalMemory方法,它會給你一個近似的用法。即使使用Perfmon,讀數也不是很準確,但它給了你一個想法。
//global.asax.cs
void Application_EndRequest(object o,EventArgs a)
{
var ctype=Context.Response.Headers["Content-Type"];
if (ctype == null || !ctype.Contains("text/html")) return;
Context.Response.Write(string.format("<p>Memory usage: {0}</p>",GC.GetTotalMemory(false)));
}
請注意,在GC啓動之前,您會看到使用量不斷增加,並且使用量將下降到更「真實」的值。
如果你有沒有錢,我建議一個專門的工具,如Memory profiler
其他的事情可以做,至少要準備,如果應用程序有內存或性能問題:
- 的正確分層應用程序,意味着您可以重構更低效的部分而不影響其他部分。
- Repository模式將非常有幫助,因爲您可以開始使用EF,找出EF使用多少內存(如在您找到的鏈接中),但是您可以切換存儲庫實現以使用PetaPoco或Dapper 。淨。
- 一般來說,OR \ M更像是一個沉重的庫,如果應用程序不需要ORM功能,而只需要一個快速的方式來使用數據庫,就可以從頭開始使用上述的mico-Orm。
- 始終處理實現IDisposable的對象。
- 當處理大型db記錄時,使用分頁。這是很好的服務器資源的使用都和用戶體驗
- 應用YAGNI(你是不是要去需要它)原則上儘可能,這在某種程度上意味着一點TDD :)
非常有用,您找到的鏈接 – MikeSW 2012-02-23 08:04:52