在 .NET 应用程序中预分配(保证)内存

2024-04-08

.NET 3.5 应用程序是否可以告诉 .NET 运行时:“嘿,我要使用nMB 内存稍后,所以请提交那么多now或失败now?"

其背景是:我有一个 C# 控制台应用程序,它运行一个数据库查询,返回大量数据,然后对其进行一些处理。该查询可能需要很长时间(数小时),并且随着结果的读取,内存使用量不断增加。查询完成后,由于我需要进行处理,内存立即出现峰值。如果机器没有足够的 RAM,应用程序就会在此时失败 - 在查询上浪费了几个小时!这对于用户来说非常令人沮丧。如果没有足够的 RAM,我希望应用程序很快就会失败。

当然,我可以尝试一些 hack,比如分配一个我并不真正需要的大数组,然后在我真正需要内存之前将其设置为 null,但这并不理想,因为它实际上可能会导致进程耗尽内存本来就足够了。理想情况下,我不想使用超出所需的内存,但除非可以在应用程序运行的整个过程中保证一定数量的内存,否则就会尽早失败。这可能吗?


您可以尝试使用MemoryFailPoint https://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint(v=vs.110).aspx class:

try
{
    using (new System.Runtime.MemoryFailPoint(20)) // 20 megabytes
    {
        ...
    }
}
catch (InsufficientMemoryException)
{
    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET 应用程序中预分配(保证)内存 的相关文章

随机推荐