创建线程时的BSoD

时间:2010-04-17 16:22:42

标签: .net multithreading bsod

我试图同步创建+5个线程,所以不应该有任何并发​​错误 代码:

System.Threading.Thread t = new System.Threading.Thread(proc);
t.Start();//==t.BlueScreen();
t.Join();

黑暗是一个特征吗? 我做错了什么?

操作系统:Microsoft Windows Vista(不幸的是)x64
语言:C#3.0 | 4.0
.Net版本:3.5 | 4

编辑:

Personel[] spersonel;

proc:

void proc()
{
    spersonel = Personel.GetRows(GetThreadSafeDataConnection());
}

企业人事:

   internal static Personel[] GetRows(System.Data.SqlClient.SqlConnection Connection)
        {
            int i = 0;
            int c = SomeOtherGODClass.Val_int(SomeGODClass.ExecuteScalar("Select Count(*) from Personel", Connection).ToString());
            Personel[] Rs = new Personel[c];
            System.Data.SqlClient.SqlDataReader sdr = SomeGODClass.ExecuteReader("Select * from Personel", Connection);
            while (sdr.Read()) Rs[i++] = new Personel(sdr);
            sdr.Close();
            if (Rs.Length > 1) mergeSort(ref Rs);
            return Rs;
        }

2 个答案:

答案 0 :(得分:3)

您粘贴的代码段看起来不错,但并没有真正告诉我们。粘贴proc的内容会很有帮助,并为我们提供更大范围的程​​序。

尽可能多地粘贴BSoD的内容也可能会有所帮助,包括它发生的原因(访问违规等)。虽然没有直接帮助,但它会提供一些线索。

答案 1 :(得分:1)

您的错误代码不是典型的BSOD代码。它是STATUS_PAGEFILE_QUOTA,“进程的页面文件配额已用尽。”

可以在64位版本的Windows上获得此功能。 64位程序不能耗尽内存,它们有16TB的虚拟内存。它们首先耗尽了可映射的内存页面。操作系统设置程序可以占用多少页面文件大小的上限。你超过了它。如果它确实是BSOD,那么它可能用完了内核内存池空间,你创建的每个线程都需要大约24 KB的内存堆栈内存。

我必须猜测你的程序创建的线程太多了。请密切关注Taskmgr.exe,进程选项卡中的“线程”列。 “性能”选项卡显示内核内存池发生了什么。