我有一个应用程序,它可预测地在非常非常(非常)大的数据集上产生内存不足错误 - 我们正试图通过优化应用程序的内存管理来解决问题,但是有问题的非常非常大的数据集需要很长时间运行(天)很难迭代测试周期并凭经验找到问题。
暂且不谈应用程序性能的问题——这是正确应用程序行为之后任务列表中的下一个问题:
是否有一种简单的方法来限制应用程序在 Visual Studio 中以调试模式运行时可用的内存量,以便强制仅在非常大的数据集上自然发生的 OutOfMemory 错误而不是在较小的数据集上发生?
我有一个应用程序,它可预测地在非常非常(非常)大的数据集上产生内存不足错误 - 我们正试图通过优化应用程序的内存管理来解决问题,但是有问题的非常非常大的数据集需要很长时间运行(天)很难迭代测试周期并凭经验找到问题。
暂且不谈应用程序性能的问题——这是正确应用程序行为之后任务列表中的下一个问题:
是否有一种简单的方法来限制应用程序在 Visual Studio 中以调试模式运行时可用的内存量,以便强制仅在非常大的数据集上自然发生的 OutOfMemory 错误而不是在较小的数据集上发生?
只需在程序启动时自己分配一个大块 - 在你做任何其他事情之前。
保留大约 500MB 的空闲空间(对于 32 位进程):
byte[] OutOfMemory = new Byte[int.MaxValue - ((1024 ^ 2) * 500)];
您是否尝试过简单地分配大量内存并在程序执行期间保留它?
这将减少应用程序其余部分的可用内存。
一个应该起作用的技巧是在程序启动时分配一个更大的缓冲区。只要您保留对它的引用以使其不被 GC 处理,那将得到您想要的。
我会得到一个内存分析器并尝试在它在生产中咬你之前人为地重新创建问题。ANTS 内存分析器非常适合:
http://www.red-gate.com/products/ants_memory_profiler/index.htm
它很昂贵,但试验可能会解决这个问题。