0

我正在尝试同步创建 +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;

过程:

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;
        }
4

2 回答 2

2

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

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

于 2010-04-17T16:26:43.020 回答
1

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

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

我不得不猜测您的程序正在创建太多线程。请密切注意 Taskmgr.exe 的“进程”选项卡中的“线程”列。性能选项卡显示内核内存池发生的情况。

于 2010-04-17T17:21:54.773 回答