我在执行SQL更新时引发的WinForms应用程序中出现System.OutOfMemory异常,我猜想。我该如何解决这个问题?在这种情况下,我使用SQLEXPRESS,在32位机器上尝试代码,以便ThreadPool在启动时具有默认的1023可用工作线程。线程池System.OutOfMemory执行SQL作业时出现异常
MyClass myClass = new MyClass();
for (int i = 0; i < 1000000; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Foo), myClass);
}
private void Foo(object state)
{
//Some Stuff and SQL UPDATE
}
当应用程序启动时,ThreadPool以8个线程开始并开始增加分配的线程数来执行作业。一段时间后,它涉及到200个线程,例如,可以不再处理它,发出System.OutOfMemory异常。当我检查堆栈跟踪时,我可以看到该方法的SQL操作发生异常。我该怎么办?我需要增加数据库的缓冲区大小吗?我不想通过这种方式限制ThreadPools的最大大小,或者尝试使用Thread.Sleep()对DB进行较慢,较不频繁的请求。
您从数据库请求了多少数据? – Peter
为什么启动这么多的线程? –
你真的需要这么多线程吗?也许你应该使用msmq和线程相当低的进程? – adt