我试图同步创建+5个线程,所以不应该有任何并发错误 代码:
System.Threading.Thread t = new System.Threading.Thread(proc);
t.Start();//==t.BlueScreen();
t.Join();
黑暗是一个特征吗? 我做错了什么?
操作系统:Microsoft Windows Vista(不幸的是)x64编辑:
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;
}
答案 0 :(得分:3)
您粘贴的代码段看起来不错,但并没有真正告诉我们。粘贴proc的内容会很有帮助,并为我们提供更大范围的程序。
尽可能多地粘贴BSoD的内容也可能会有所帮助,包括它发生的原因(访问违规等)。虽然没有直接帮助,但它会提供一些线索。
答案 1 :(得分:1)
您的错误代码不是典型的BSOD代码。它是STATUS_PAGEFILE_QUOTA,“进程的页面文件配额已用尽。”
可以在64位版本的Windows上获得此功能。 64位程序不能耗尽内存,它们有16TB的虚拟内存。它们首先耗尽了可映射的内存页面。操作系统设置程序可以占用多少页面文件大小的上限。你超过了它。如果它确实是BSOD,那么它可能用完了内核内存池空间,你创建的每个线程都需要大约24 KB的内存堆栈内存。
我必须猜测你的程序创建的线程太多了。请密切关注Taskmgr.exe,进程选项卡中的“线程”列。 “性能”选项卡显示内核内存池发生了什么。