title: .NET Cross-Assembly Performance Hit
body: <p>I am reading Bill Wagner's book <em>Effective C#</em>.  In Item 32 he is advocating for developers to create smaller, more cohesive assemblies that can be reused more readily.  However, in that same item he says:</p>
  
  <blockquote>
    <p>... Extra Security checks also are
    done across assembly boundaries.  All
    code from the same assembly
    same has the same level of trust (not
    necessarily the same access rights,
    but the same truth level).  The
    CLR performs some security checks
    whenever code flow crosses an assembly
    boundary.  The fewer times your
    program flow crosses assembly
    boundaries, the more efficient it will
    be... None of these performance
    concerns should dissuade you from
    breaking up assemblies that are too
    large.  The performance penalties are
    minor.</p>
  </blockquote>
  
  <p>My question is are there extra security checks performed for every method call into Foo.dll, or only the first time the assembly is loaded?</p>
  
  <p>Thanks</p>