我有一个CLR DLL(使用C#编写的源代码),它被加载到SQL Server中。初始化过程很昂贵,所以我通常只想做一次。但是,有时可能需要重新初始化,我不想重新启动SQL Server来完成此操作。因此,我有而不是将这些静态变量标记为只读。我的问题是,我的静态变量以看似随机的方式重置为null。我非常有信心,我没有任何线程问题,并且我的代码无论如何都将这些值设置为null。通过分析我的日志文件,我只能猜测SQL Server以某种方式将值重置为空(有时可能重新加载DLL?)。 SQL Server是否这样做?如果是这样,有没有办法配置它不?SQL Server CLR静态变量设置为空
2
A
回答
2
SQL Server按照它认为合适的方式加载和卸载CLR模块(在内存压力下,在未处理的异常情况下,more on it here)。即使你能够找出所有相关的条件和时机,这在未来的版本中也可能会发生变化。
保持大量的数据不会很好地扩展。为此编写一个Windows服务,并通过tcp从您的托管UDF中调用它(例如)。如果您确实需要进程内状态,请使用持久性缓存机制而不是静态变量(数据库,文件系统) - 或者预计静态可随时变为空,每当它发生时重新初始化它们,没有任何问题采用这种方法本身,除了可伸缩性问题和并发/同步。
相关问题
- 1. 静态变量未设置?
- 2. Angularjs设置静态变量
- 3. Java - 为什么我的静态变量被设置为空?
- 4. 当存储该引用的局部变量设置为空时,为什么静态变量未设置为空?
- 5. 设置为空的静态变量可用于GC?
- 6. 静态最终常量变为空
- 7. 静态变量显示为空
- 8. 设置静态成员指针变量
- 9. php静态变量没有设置
- 10. 在静态查询中设置变量
- 11. sql server - 在运行时设置变量
- 12. SQL Server设置多个变量
- 13. SQL Server 2008设置DateTime变量
- 14. 静态变量在一段时间后重置为空
- 15. 静态变量在一段时间后重置为空
- 16. 静态变量重置 - PHP
- 17. 检查空,在SQL Server空变量
- 18. 如何将JavaScript变量设置为静态json数据?
- 19. 线程对象可以设置为静态变量
- 20. 静态变量为了
- 21. 设置空的DateTime变量
- 22. 为什么不设置一个静态变量来消除静态变量的目的?
- 23. SQL Server存储过程:设置为变量
- 24. SQL Server - 将公式和/或计算字段设置为变量?
- 25. SQL Server 2005将变量设置为选择查询的结果
- 26. SQL SERVER中的CLR
- 27. Sql Server CLR函数
- 28. SQL Server CLR - SqlDataRecord.SetValue InvalidCastException
- 29. 静态变量
- 30. 静态变量
该描述与SQLCLR函数或聚合应该是几乎相反。 SQLCLR类使用SQL Server的线程在SQL Server的内存空间内运行。它的生命周期由SQL Server控制。因此它*不应该执行昂贵的初始化,也不需要它。它*不应该*有静态变量。它*不应该*浪费可以用来缓存数据的内存。换句话说,你确实有线程问题,但这些可能是你问题最少的部分 –
代码在哪里,它想做什么?为什么SQLCLR组件需要任何类型的初始化?除了注意到SQLCLR类并不意味着以这种方式工作以外,不可能在没有代码的情况下提供帮助 –
此代码涉及到密钥管理器以导出加密密钥。我将密钥缓存在内存中,以便不必重复地访问密钥管理器(因为这是昂贵的过程)。不幸的是,我不允许发布这个特定项目的任何代码。 – Hmmmmm