问题
in my Class I have a static dictionary of strings object which contains a big number of Items (it reads from a file and initial them) I wrote a static constructor to do so and it takes a few seconds, but I want to do it once to be faster, since I'm doing it in ASP.Net and I want my website not to have this overhead what should I do? if this constructor runs for each object then I was thinking of some method instead but I guess I have to run this method in each page of website which user runs, so I think again it would be the same, am I right? what's your solution for initialization a big set of variables only once? thanks
回答1:
It runs once for the type, per AppDomain
. Not once per instance. From the C# 4 spec, section 10.12:
The static constructor for a closed class type executes at most once in a given application domain. The execution of a static constructor is triggered by the first of the following events to occur within an application domain:
- An instance of the class type is created.
- Any of the static members of the class type are referenced.
Note the part about it being per closed class. So if you have a generic type Foo<T>
, then Foo<string>
is a separate type to Foo<object>
(etc), will have separate static fields, and will have its static constructor invoked separately.
回答2:
It runs one time only during the lifetime of the application.
From MSDN - Static Constructors:
A static constructor is used to initialize any static data, or to perform a particular action that needs to be performed once only. It is called automatically before the first instance is created or any static members are referenced.
来源:https://stackoverflow.com/questions/7059018/in-c-sharp-does-static-constructor-run-for-each-initialization-of-object-or-onl