我遇到内存泄漏问题。当我在窗口模式下运行我的应用程序时,一切正常,但当我将其作为Windows服务托管时,存在内存泄漏问题。它没有释放DbContext和另一个对象,因为它们被引用为InterpasstableDbCommand,它是GC Root。 InterceptableDbCommand包含对Entity Framework生成的数据库的查询。
在应用程序和Windows服务模式之间重新启动内存的差异是什么?
答案 0 :(得分:0)
一般情况下,垃圾收集器会释放内存,如果它的' Gen 0'要溢出(大对象堆也可以触发GC)。 AFAIK垃圾收集器使用相同的方法为.Net应用程序和Windows服务释放内存。
如果存在内存泄漏,则它应该存在于Application和Windows Service中(如果工作流程完全相同)。可能与应用程序有相同的问题,但由于其工作流程性质,您不会注意到。你是如何测试内存泄漏的呢?
更重要的是:确保您处置InterceptableDbCommand和所有其他一次性对象。