2011-09-06 70 views
0

我讀到靜態類的一些文章,但我有一些問題:靜態類概述

  1. 如果採取靜態類發生在內存?

  2. 根據C# Static Methodsmeans that you want the declaration to refer to a single location如果我在Asp.Net中使用靜態類是否意味着我有一個所有請求之間共享的位置?

  3. 我在文章中看到,靜態類和靜態方法比面向實例的類更快,所以爲什麼我沒有在每個地方看到它們。我的意思是.Net中存在一些靜態類和方法太。

+2

堅持以SO知識,不秉周圍是明顯包含FUD像「靜態類和靜態方法更快」的網站。 :) – bzlm

+0

如果是這樣,請給我(和其他誰不瞭解靜態類)有關的參考。感謝 – Arian

回答

5

1.

靜態類由當被裝載含有 類別的節目或命名空間的.NET Framework公共 語言運行庫(CLR)自動加載。

所以這意味着靜態類加載到內存中。這意味着你不希望當你的進程啓動時你所有的類都加載到內存中。

2. asp.net中的靜態類保存在應用程序狀態,所以是的,你有一個位置在所有請求之間共享。 靜態方法在asp.net中很有用,但前提是你不要在方法內部使用靜態對象,因爲你可能會遇到不同的線程訪問修改相同的可變區。

3.如果你使用很多靜態類,它們將被加載到內存中,這並不是你想要的東西。

請參閱此鏈接瞭解更多信息: static variables in asp.net/C#

+0

greate @ Dorin.in第3號,有巨大的RAM是所有類將加載的importatnt? – Arian

+0

是必要的RAM內存。但請注意,如果使用數據庫,建議不要使用靜態類來連接它,因爲它會使您的連接保持打開狀態,從連接在應用程序加載時打開到應用程序關閉。 – Dorin

+1

這幾乎是正確的。 CLR不會初始化類的靜態字段,直到訪問該類的任何靜態或實例成員。它不會在應用程序啓動或程序集加載時發生。 – Sven