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

时间:2015-01-22 23:23:24

标签: c# .net memory memory-management

.NET 3.5应用程序是否可以告诉.NET运行时:"嘿,我稍后将使用 n MB内存,所以请提交那么多现在或者现在?"

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

当然,我可以尝试一些黑客,比如分配一个我真正不需要的大型阵列,然后在我真正需要内存之前将其设置为null,但这并不理想,因为它实际上可能会导致否则会有足够的内存耗尽的过程。理想情况下,我不想使用比所需更多的内存,但只是在早期失败,除非在我的应用程序运行的整个时间内保证一定数量。这可能吗?

1 个答案:

答案 0 :(得分:20)

您可以尝试使用MemoryFailPoint类:

try
{
    using (new System.Runtime.MemoryFailPoint(20)) // 20 megabytes
    {
        ...
    }
}
catch (InsufficientMemoryException)
{
    ...
}