从SQL Server中的单个数据库(模拟GAC)共享组件



SQL Server版本:2005

.NET版本:3.5

我正在尝试使用有关内存和性能的最有效方法与CLR UDF一起工作。因此,SQL Server似乎带有来自GAC的预载.NET组件。但是,SQL Server禁止您从GAC到SQL数据库加载自定义组件。试图找到一种替代方法,我通过按数据库加载组件来实验SQL CLR,并利用我的CLR UDF来运行SQL查询,以发现每个数据库都分配了自己的AppDomain。此外,每个AppDomain都加载一个组件的副本(我的主汇编及其依赖项)。说得通。

好吧,然后我尝试将组件创建到一个数据库中,然后通过dbname.dbo.clrudfname在其他数据库中引用CLR UDF,以找到有趣的东西。唯一加载的AppDomain属于托管程序集的数据库。另外,唯一加载的组件是该AppDomain中托管的组件。此外,性能几乎是相同的,引用了另一个数据库的组件,与托管自己的副本的数据库相反。

有人在更有效地管理CLR内存时看到了这种方法吗?

没有理由在同一数据库服务器上具有重复的组件。那只是维护的额外副本。

创建一个称为实用程序(或CLR或其他)的数据库,然后将CLR放在那里。然后,您可以使用服务器上任何数据库的3个部分名称(db.schema.object)引用它们。

由于您正在使用CLR,我建议您在此处查看David Wiseman的IO实用程序解决方案:http://www.wisesoft.co.uk/articles/sql_server_server_clr_io_io_utility.aspx

它非常适合将文件系统与T-SQL集成。对于初学者学习如何构建CLR也很棒。

最新更新