我有一个自然语言处理/句子标记例程,它是用c#编写的sqlserver clr程序集开发的。该例程需要一个大约20MB的模型文件(用训练数据开发)进行计算,我尝试在第一次调用该函数时将模型文件加载到静态字段。但是,似乎PERMISSION_SET = EXTERNAL_ACCESS不允许写入静态字段。当然,有一个UNSAFE大会可以解决这个问题,但我的DBA根本不喜欢这个想法。每次调用函数时加载20MB模型文件都没有意义。无论如何都要在不使用UNSAFE的情况下在汇编中存储一些信息。
答案 0 :(得分:0)
假设模型文件(即静态变量的值)在加载后没有改变,你应该能够将静态变量设置为readonly
,可以在同一个类的构造函数中设置或在申报时。
以下是readonly的MSDN页面。
另一种选择是修改代码以将数据放在Collection中,然后将该Collection标记为readonly
。标记为readonly
后,无法重新分配集合,但您仍然可以使用Add
和Remove
方法向其中添加元素并从中删除元素。这将允许您将程序集标记为SAFE
。请看我对另一个S.O.的回答。有关详细信息的问题:
Is it safe to change static readonly variables in C# SQLCLR?