我正在尝试同步创建+5个线程,所以应该不会有任何并发错误。
代码:
System.Threading.Thread t = new System.Threading.Thread(proc);
t.Start();//==t.BlueScreen();
t.Join();黑暗是一种特征吗?
我做错了什么吗?
操作系统:微软windows vista(不幸的是) x64
Language:C# 3.0|4.0
.Net版本:3.5|4
编辑:
Personel[] spersonel;进程:
void proc()
{
spersonel = Personel.GetRows(GetThreadSafeDataConnection());
}Personel:
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;
}发布于 2010-04-18 00:26:43
您粘贴的代码片段看起来很好,但实际上并没有告诉我们太多信息。这将有助于粘贴proc的内容,并为我们提供更大范围的程序正在做什么。
粘贴尽可能多的BSoD内容可能也很有帮助,包括它发生的原因(访问冲突等)。虽然不是直接有帮助,但它将提供一些线索。
发布于 2010-04-18 01:21:55
您的错误代码不是典型的BSOD代码。它是STATUS_PAGEFILE_QUOTA,“进程的页面文件配额已耗尽。”
在64位版本的Windows上实现这一点是可能的。64位程序不会耗尽内存,它们有16TB的虚拟内存。它们首先会用完可映射的内存页。操作系统设置了程序可以容纳的分页文件大小的上限。你已经超过它了。如果它真的是一个BSOD,那么它可能耗尽了内核内存池空间,您创建的每个线程需要大约24KB的内存用于内核堆栈。
我不得不猜测你的程序创建了太多的线程。请注意Taskmgr.exe进程选项卡中的线程列。Performance选项卡显示内核内存池的情况。
https://stackoverflow.com/questions/2659080
复制相似问题