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也很棒。