我可以在不使用UNSAFE的情况下将信息存储在SQL Server CLR程序集中的静态变量中吗?

时间:2015-01-27 20:06:52

标签: c# sql-server sqlclr

我有一个自然语言处理/句子标记例程,它是用c#编写的sqlserver clr程序集开发的。该例程需要一个大约20MB的模型文件(用训练数据开发)进行计算,我尝试在第一次调用该函数时将模型文件加载到静态字段。但是,似乎PERMISSION_SET = EXTERNAL_ACCESS不允许写入静态字段。当然,有一个UNSAFE大会可以解决这个问题,但我的DBA根本不喜欢这个想法。每次调用函数时加载20MB模型文件都没有意义。无论如何都要在不使用UNSAFE的情况下在汇编中存储一些信息。

1 个答案:

答案 0 :(得分:0)

假设模型文件(即静态变量的值)在加载后没有改变,你应该能够将静态变量设置为readonly,可以在同一个类的构造函数中设置或在申报时。

以下是readonly的MSDN页面。

另一种选择是修改代码以将数据放在Collection中,然后将该Collection标记为readonly。标记为readonly后,无法重新分配集合,但您仍然可以使用AddRemove方法向其中添加元素并从中删除元素。这将允许您将程序集标记为SAFE。请看我对另一个S.O.的回答。有关详细信息的问题:

Is it safe to change static readonly variables in C# SQLCLR?