gpt4 book ai didi

c# - 避免应用程序内存不足异常的最佳方法

转载 作者:行者123 更新时间:2023-11-30 20:06:13 29 4
gpt4 key购买 nike

我们正在设计一个压力测试应用程序,它将向特定 Web 服务发送大小为“1 MB”的大量 HTTP 请求。为了实现压力,我们在应用程序中使用了多个线程。结构类似于我们有 X EnqueueThreads,它将创建 HTTPRequest 数据并将其添加到队列中。 Y WorkerThreads 将使请求出队,并将它们提交给 Web 服务。所有请求都是异步的。现在的问题是,Enqueue 线程的工作速度比 WorkerThreads 快得多,所以如果没有停止/等待条件,它们将添加请求,直到抛出内存不足异常,从而使注入(inject)器(该实用程序将在其中运行)慢的。目前我们正在处理 OutOfMemory 异常并让入队线程休眠一段时间。我能想到的另一种方法是限制队列大小。

但是我想知道关于什么是使用有限系统资源(特别是内存)的最佳方法的看法。?提前致谢。

最佳答案

您可以而且可能应该使用 MemoryFailPoint class在这样的场景中。

如果你得到一个 OutOfMemoryException那么应用程序状态可能已损坏,您不应该尝试从中恢复。 MemoryFailPoint旨在通过允许您确定将应用程序减慢多少来避免出现这种情况,从而避免内存不足。您让框架确定您是否可以执行该操作,而不是根据您的应用程序使用的内存量来猜测您“认为”可以逃脱多少。

你还应该 check for memory usage through the garbage collector不是准确读取实际分配了多少托管内存的过程。使用专用内存大小会使您的读数低得多,并且您仍然可能会出现内存不足的情况,尽管看起来您有很多空闲空间。

MSDN 页面上的代码示例展示了如何估计操作的内存使用情况,并使用该信息等待内存可用,然后再尝试处理更多请求。如果您可以确定需要大量内存的代码区域,这是限制它并避免内存不足的好选择。

关于c# - 避免应用程序内存不足异常的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039296/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com