我遇到了一个问题,将一个长时间运行的单例添加到 HttpApplicationState 中,该单例执行一些数据屏蔽 (GDPR),在后台运行一段时间后停止屏蔽数据。
很难调试,因为它只发生在我们的 UAT 环境中,而且通常会在一夜之间发生。
问题是数据屏蔽库是第三方的,并且仍在进行中(或在进行中的工作结束时)。
但如果有更好的 GC 知识的人可以查看下面的初始化代码,并确认这超出了 GC 域,我将不胜感激。
Translator.GetInstance() 是 GDPR 屏蔽/翻译单例的惰性加载器。所以它在用户第一次屏蔽/取消屏蔽数据时被初始化。
protected void Application_Start()
{
if (Translator)
{
Application["MaskDataUtility"] = new MaskDataUtility(Translator.GetInstance());
}
else
{
Application["MaskDataUtility"] = new MaskDataUtility(new CustomTranslator());
}
}