Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

in C# does Static constructor run for each initialization of object, or only once?

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

like image 589
ePezhman Avatar asked Nov 30 '22 16:11

ePezhman


2 Answers

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.

like image 56
Jon Skeet Avatar answered Dec 05 '22 09:12

Jon Skeet


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.

like image 27
Oded Avatar answered Dec 05 '22 10:12

Oded