使用PerCall,是在WCF或每次调用中加载一次的程序集?

时间:2012-09-12 15:45:27

标签: c# .net wcf

我的WCF service配置为PerCall。每次调用都会建立与后端数据库的Entity Framework连接,并会加载一些程序集。

如何在WCF中加载程序集,是按每次调用加载,还是每个服务生命周期加载一次?

在这方面改用PerSession会有什么好处,还是这不是问题?

1 个答案:

答案 0 :(得分:2)

只加载了一个dll副本。

不同之处在于内存中对象的实例和与数据库的连接。

例如,如果您的解决方案有一个与数据库建立连接的dll。假设服务器刚刚重启。每次通话:

  • 调用1进来的DLL将加载到内存中并编译JIT
  • 将创建服务实例
  • 将创建与数据库的连接
  • 然后此调用完成
  • 连接将重新连接到连接池
  • 将处理该服务的实例,垃圾收集将清理它。
  • 然后拨打2和3同时进来
  • 加载了dll并编译了JIT因此无法正常工作
  • 将为2和3
  • 创建2个实例
  • 将从连接池中检索一个连接
  • 将创建一个连接
  • 然后通话完成
  • 连接将重新连接到连接池
  • 将处理该服务的实例,垃圾收集将清理它。

总是在首次点击时编译JIT的DLL的单个副本。

  • 每次通话,每次通话的实例,在通话结束时处理。
  • 每个会话,会话到期时处置的每个会话的实例
  • 单个,单个实例