【发布时间】:2013-03-27 22:22:34
【问题描述】:
我有一项服务,我在很长一段时间内查询一次,我想“简化”或提高其内存分配的效率。
大多数时候它只是坐着等待,偶尔它会收到一个需要分配很多内存的请求,并对其进行一些处理。我事先不知道类型或结构 - 这取决于请求,并且变化很大。
现在,大型处理请求被一些喋喋不休(其他请求)排除,这可能需要几秒钟。
我想要做的是,当聊天(较小的请求)开始时,对 .Net 框架说:转到 Windows,并为自己获取几 GB 的内存,以便在我询问时更快地可用,当我完成后,对 .Net 说:我目前没有使用的所有东西,你可以还给我,因为我暂时不需要它。
在我们说话的时候,我正在开始分析...但我怀疑这将是可以改进的问题的一部分。
我会尽量澄清情况。
我有一个位于服务器上的服务,95% 的时间什么都不做。每隔一段时间,它就会收到执行一些主要是内存密集型处理的请求。
我提前一点时间就知道这一切都会发生。
我想要做的只是提示 GC“很快就会需要大量内存”,然后是“暂时不需要任何特别的东西”
好的。 我已经完成了分析,并决定我不在乎这个。 分配确实需要一些时间(几到几十毫秒),但与处理的其余部分相比,它是微不足道的......
关于发布部分,它最终会发生,并且不会真正干扰服务器的其余部分......
【问题讨论】:
-
您的意思是突发的内存分配会导致您的应用程序出现可衡量的性能问题吗?否则,你怎么知道堆管理器和垃圾收集器并没有完全按照你的要求做?
-
您将无法优化框架的垃圾/内存管理。它已经非常好......此外,由于问题非常模糊,因此很难就您当前的情况提供任何建议。
-
而你怎么知道瓶颈是内存分配?
-
分配内存非常快(只要你有足够的空闲空间)。我很有信心这不是你的瓶颈。
-
@AK_ 我说没关系。分配内存不依赖于分配的内存量。分配一个字节并不比分配 100 MB 快。
标签: c# .net memory-management garbage-collection