代码之家  ›  专栏  ›  技术社区  ›  MK.

asp.net互操作内存限制

  •  3
  • MK.  · 技术社区  · 14 年前

    解决了的! 原来该对象正在创建一个窗口句柄,而我们达到了10K窗口句柄的限制(除了在IIS中由于某种原因在2K实例中发生的情况外)

    4 回复  |  直到 14 年前
        1
  •  1
  •   James King    14 年前

    什么操作系统,是32位还是64位?你用什么来确定内存使用量?

    当您说要显式释放这些对象时,是否意味着您正在使用Marshal.ReleaseComObject()?

    我假设您的<%@Page>标记中有AspCompat=true。。。如果你不这么做的话就不会指望它跑了。

    我的第一个怀疑,仅仅基于我目前所读到的信息,是500Mb并不是实际使用的总内存,和/或是内存碎片问题。我已经看到,当使用的内存不足一半时,I is进程会出现这种情况,并且错误往往是随机的,这取决于当时创建的对象。顺便说一下,80070008是“没有足够的存储空间”。

    当然,32位计算机上的进程限制是2GB,但即使进程没有使用完整的2GB,如果在创建对象时没有所需大小的连续内存块,则在尝试分配时会出现内存不足错误。大量并发用户意味着许多COM对象(和其他对象)在短时间内被分配和释放。。。这就意味着作为嫌疑犯的分裂。

    制定攻击计划需要更多关于COM对象及其使用方式的信息。

        2
  •  2
  •   MK.    14 年前

    解决了的!原来该对象正在创建一个窗口句柄,而我们达到了10K窗口句柄的限制(除了在IIS中由于某种原因在2K实例中发生的情况外)

        3
  •  0
  •   Bill Bingham    14 年前

    使用命令模式在异步线程中排队和执行com互操作。这可以释放iis使用的线程数,并允许您控制com应用程序的调用/实例数。

        4
  •  0
  •   TalentTuner    14 年前

    您可以考虑对象池,而不是每次都创建一个新对象。