出于性能原因,我编写了一个 C#.Net 独立 DLL,用于加密 SQL 2008 R2 表(在 64 位平台上运行)上的数据。这可能会占用大量内存,因为可能需要通过很多行。
我已将其与 SQL CLR 集成为程序集/函数,一切正常。
此程序集使用 Permission_Set'UNSAFE' 运行,但作为托管程序集运行(由 sys.dm_clr_loaded_assemblies 报告)。
我通过 MS Process Explorer 密切关注内存使用情况,每次调用该函数时内存使用量都会增加,但它没有被释放。
通过阅读 MSDN 文档,AppDomain 缓存了函数返回的数据,以提高效率。如果我卸载程序集,内存就会被释放。
我有几个问题:
- 有什么方法可以在不卸载 AppDomain 的情况下“刷新”它?
- 来自标记为“Dispose”的 DLL 中的所有对象都会被 GC 清理吗?
- (这显然与上述有关!)GC 是否也覆盖 SQL Server 进程空间?
我非常感谢您对上述内容的帮助,因为在线文档对 SQL CLR 和内存等内容并不清楚。
谢谢 :)