SQL 服务器 CLR 静态变量设置回空
SQL Server CLR static variables set back to null
我有一个 CLR DLL(用 C# 编写的源代码)加载到 SQL 服务器中。初始化过程很昂贵,所以我通常只想做一次。但是,有时可能需要再次初始化,我不想必须重新启动 SQL 服务器才能做到这一点。因此,我 not 将这些静态变量标记为只读。我的问题是我的静态变量以一种看似随机的方式被重置为 null。我非常有信心我没有任何线程问题,并且我的代码 none 无论如何都将这些值设置为 null。通过分析我的日志文件,我只能猜测 SQL 服务器以某种方式将值重置为 null(也许有时会重新加载 DLL?)。 SQL 服务器是否这样做?如果是这样,有没有办法配置它不?
SQL 服务器加载和卸载它认为合适的 CLR 模块(在内存压力下,如果出现未处理的异常,more on it here)。即使您能够弄清楚所有相关条件和时间,这在未来的版本中也可能会发生变化。
保留大量数据不会很好地扩展。为此编写一个 Windows 服务,并通过 tcp 从您的托管 UDF 调用它(例如)。如果您确实需要进程内状态,请使用持久缓存机制而不是静态变量(数据库、文件系统)——或者预计静态变量可以随时变为 null,只要它发生就重新初始化它们,没有错使用这种方法 本身 ,除了可扩展性问题,以及 concurrency/synchronization.
我有一个 CLR DLL(用 C# 编写的源代码)加载到 SQL 服务器中。初始化过程很昂贵,所以我通常只想做一次。但是,有时可能需要再次初始化,我不想必须重新启动 SQL 服务器才能做到这一点。因此,我 not 将这些静态变量标记为只读。我的问题是我的静态变量以一种看似随机的方式被重置为 null。我非常有信心我没有任何线程问题,并且我的代码 none 无论如何都将这些值设置为 null。通过分析我的日志文件,我只能猜测 SQL 服务器以某种方式将值重置为 null(也许有时会重新加载 DLL?)。 SQL 服务器是否这样做?如果是这样,有没有办法配置它不?
SQL 服务器加载和卸载它认为合适的 CLR 模块(在内存压力下,如果出现未处理的异常,more on it here)。即使您能够弄清楚所有相关条件和时间,这在未来的版本中也可能会发生变化。
保留大量数据不会很好地扩展。为此编写一个 Windows 服务,并通过 tcp 从您的托管 UDF 调用它(例如)。如果您确实需要进程内状态,请使用持久缓存机制而不是静态变量(数据库、文件系统)——或者预计静态变量可以随时变为 null,只要它发生就重新初始化它们,没有错使用这种方法 本身 ,除了可扩展性问题,以及 concurrency/synchronization.