Система безопасности в .NET довольно сложна. Я не уверен, что ответ так прост, как может показаться на первый взгляд. Даже если у вас есть одна сборка, проверки безопасности все еще выполняются. Когда вы запускаете приложение, имеющее всю логику в одном .exe, вы не пропускаете проверки безопасности .NET для загрузки сборки и проверки, а также не пропускаете проверки наследования типов. Однако, как только безопасность была проверена для данной области, это обычно не происходит снова (могут быть некоторые смягчающие обстоятельства, которые могут вызвать повторную проверку доказательств).
Несколько сборок не будут вести себя по-разному. Может быть некоторая дополнительная стоимость загрузки сборки и начальная стоимость доступа к типу, поскольку каждая новая сборка потребует этих первоначальных проверок безопасности. Однако эти проверки обычно бледнеют по сравнению с процессом JITting самого кода.
Помимо базовой загрузки сборки и проверок безопасности типов, у вас также могут быть явные требования к разрешениям. Microsoft. Пространства имен системы пронизаны проверками безопасности Demand и LinkDemand, которые проверяют наличие у всех вызывающих абонентов стека (требование) или непосредственного абонента (требование соединения) разрешение на выполнение вызова. (Ваш код должен также включать такие проверки, которые были бы уместны для проверки того, что вызывающие абоненты также имеют соответствующее разрешение.) Эти проверки безопасности будут выполняться независимо от того, где находится код ... локально, в другой сборке или даже в сборке в другом домене приложения. , Однако, как только вы получаете вызовы, сделанные к другим доменам или процессам приложений, или даже к сервисам и другим серверам, затраты на маршалинг этих вызовов и установление соединений становятся на порядок дороже.
Это даже не вся картина, когда речь идет о безопасности .NET. Некоторые проверки безопасности обходятся дороже, чем другие. Некоторые требуют учетных данных, другие требуют доказательств и т. Д. Безопасность - это не то, что вы можете уклониться ... это важнейший и важный компонент современной разработки программного обеспечения. Я не стал бы сильно беспокоиться о стоимости безопасности ... так как она хорошо реализована и оптимизирована в .NET Framework и CLR. Я бы приложил все усилия к тому, чтобы ваше приложение было правильно спроектировано и организовано. Если разделение кода на несколько сборок является логичным, сокращает затраты на обслуживание, развертывание и рефакторинг, тогда его ХОРОШО стоит небольших дополнительных затрат на безопасность.