2015-12-20 17 views
5

Powiedz, że mam kod, który musi zostać zoptymalizowany, ale łatwy do debugowania w tym samym czasie. W ten sposób przypisze ciąg znaków do każdej wartości, której używam. Czy ciąg zadaje duże trafienie wydajnościowe lub jest przekształcany w stałą referencję uzyskaną z ciągu znaków.Intern podczas kompilacji JIT/AOT, zamieniając się w pojedynczą prostą instrukcję?Czy CIL ldstr jest zastępowane stałym odwołaniem do ciągu znaków.Intern podczas kompilacji JIT/AOT?

przykład:

W IL byłoby ldstr "gazilion lines".

Czy podczas JIT/AOT kompilacji zamienił się coś podobnego ldsflda string.InternCache.ID_0000647516166 i const string ID_0000647516166 = "gazilion lines"; jest dodawany do string.InternCache?

Tak, teoretycznie mógłbym zaglądnąć w https://github.com/mono/mono, ale nie mam pojęcia, jak go znaleźć.

Tak, miksuję CIL, C# i niezależnie od tego, w jaki CIL jest kompilowany, ale masz pomysł.

Czy ldstr jest gwarantowane jako O(1)?

Tak, to "szczegóły implementacji" CLR, ale miałoby sens, gdyby został zoptymalizowany w ten sposób.

+2

Długa odpowiedź: tak. Staje się jednym MOV reg, imm instrukcji w czasie wykonywania, należy użyć debugger, który może pokazać demontażu, więc nie musisz się martwić o to, jak działa token metadanych i jitter. –

Odpowiedz

1

Długa odpowiedź: tak. Staje się jednym MOV reg, imm instrukcji w czasie wykonywania, pamiętaj, aby użyć debuggera, który może pokazać demontażu, dzięki czemu można nie martwić się o to, jak działa token metadanych i jitter. - Hans Passant

+0

Proszę rozwinąć/na poszczególne pytania. – user2864740

Powiązane problemy