概述
我在通过计算器类迭代多次时遇到性能下降.
迭代计数开始时每次迭代大约需要3百万次,并且随着迭代次数的增加需要更长的时间(每个进程30,000次).我必须停止程序/重新启动执行,我离开它以恢复正常状态(每个进程3百万).
我所做的
我有一个科学的应用程序,测试一个过程的一组参数.
例如,我有N个场景(即参数组合),在实验集上进行测试,它包含一个计算器类,它接受输入中的参数,根据T可能的XP条件处理它们,并将输出存储在ORM对象中,即在每次迭代后触发到DB.换句话说,N个参数组合中的每一个通过计算器传递T次.
Parameter combination : Params Set 1, Params Set 2, ...., Params Set N
Experimental Set : XP Set 1 , XP Set 2 , ...., XP Set T
所以我有NxT组合,N和T各约为256,这给出了65000次迭代.
我怎么做
我有一个GUI来修复参数集,并启动后台工作程序(每个参数组合一个).每个Backrgound工作程序加载第一个T XP集,执行当前参数集,移动到下一个XP集,依此类推.在计算器的每次迭代之后(即在每个Nx / Tx之后)生成报告,并且触发事件以填充.NET Linq / SQL ORM对象(AgileFX)并将它们存储到SQL Server数据库中.
问题
这个过程在前30分钟运行良好然后慢慢开始漂移,每次迭代都需要更长时间(声音就像内存溢出一样……)
暗示
奇怪的是,实验者非常有针对性地注意到处理时间以线性方式增长:先前处理时间增加了300万.归结为算术级数(Tn 1 = Tn 3mn)
我有一个12核INTEL和24GB RAM
最佳答案 一个快速的建议,你能通过Memoization解决你的问题,避免重新计算应该知道的结果吗?
另外,请记住,如果你有垃圾收集器将无法进行垃圾收集,它将以某种方式找到对象的引用!