2010-11-21 18 views
0

J'étudie sur les assemblages multifil .NET. Dans le cadre des assemblées multifichier, les états du livre:Assemblages .NET Multiples ... Peut-on économiser de l'espace RAM car les modules secondaires sont chargés à la demande?

* .netmodules [pas le module principal] sont chargés à la demande par le CLR lorsqu'il est utilisé par le code d'appel

m'a mis sur le droit suivre si je me trompe, mais lors de l'appel d'un fichier exécutable, tous les assemblages référencés, y compris le code compilé du fichier exécutable sont chargés en mémoire, puis traités par le JIT (compilateur Just in time) lorsque le code est appelé. Je peux mal comprendre la citation ci-dessus, mais comment je suis en train de lire la citation est que .modules qui font partie d'un multifle ensemble ne sont pas chargés en mémoire jusqu'à ce que appelé.

Ai-je raison de penser cela?

Répondre

1

... mais lorsque vous appelez un fichier exécutable, tous les ensembles référencés, y compris le code compilé du fichier exécutable est chargé dans la mémoire

Assemblées no sont chargés comme ils sont nécessaires. Si vous n'avez jamais besoin d'un assemblage (par exemple, un assemblage de ressources satellites pour une langue particulière ou une référence quelconque), ils ne sont pas chargés. JIT de ces assemblages sont effectués chaque fois qu'ils sont accédés et chargés. Pour référence, utilisez CLR de Richter via C#.

+0

Je vois maintenant que les assemblages référencés ne sont pas chargés jusqu'à ce qu'ils soient nécessaires. L'ensemble d'exécution est-il entièrement chargé en mémoire? Par exemple, si j'exécute MyExecutingAssembly.exe, l'ensemble complet est-il chargé en mémoire? ("full" signifiant les métadonnées, CIL, en-têtes, manifestes) – contactmatt