【问题标题】:App-pool dll and GAC应用程序池 dll 和 GAC
【发布时间】:2013-02-02 13:42:54
【问题描述】:

我们有大约 80 个应用程序将在同一台服务器上。 所有使用相同自定义构建应用程序、aspnet webform、c# 的非常小的站点是否已编译。 每个应用程序在其自己的 bin 目录中都有一个应用程序 dll 副本,以及一些开源第三方库(bin 文件夹在磁盘上大约 15mb) 该应用程序由我提供,因此我可以重建签名并放入 GAC,以便所有站点都可以从那里获取。 我的问题是:“就内存消耗而言,gac 中只有一个 dll 副本而不是 80 个副本会更好吗?” “这是否可以提高整体性能和内存使用量,除了我可以删除 15*80Mb 磁盘空间使用量之外?” 谢谢

【问题讨论】:

  • 我只能考虑使用像VMMap 这样的工具来确定内存是否和/或是否可以共享。这些应用是否共享同一个应用域?
  • 很好的建议。该工具确实表明,asp 在临时文件夹中创建了每个 dll 的副本。所以磁盘空间消耗是两次(一个在 bin 中,一个在 temp 中),每个使用的 dll 都保存在内存中并消耗内存两次。相反gac dll被加载一次。我想这会导致服务器上的大量加载/卸载过程,并可能减慢站点服务速度。可能在 gac 中移动大部分 dll 可以提高整体性能。

标签: c# asp.net iis-7 gac application-pool


【解决方案1】:

Dll 内存消耗是相同的。在 GAC 中注册 Dll 的一个可靠优势是它可以被系统上运行的任何 dot net 应用程序找到。第二种是将dll放入GAC时,通过使用ngen.exe,您可以生成DLL的本机映像,这是一个完全机器级的编译版本,与即时编译相同,从而提高了执行速度。可能还有其他优点,但我现在能想到的就这些了。

【讨论】:

  • +1。另一个优势是在一个地方更新 dll,而不是 80。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
相关资源
最近更新 更多