4

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 内存方面存在问题?

4

1 回答 1

4

没有理由在同一数据库服务器上有重复的程序集。这只是需要维护的额外副本。

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

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

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

于 2012-12-20T20:57:56.567 回答