0

同時実行エラーが発生しないように、+5 スレッドを同期的に作成しようとしています。
コード:

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

暗さは特徴ですか?
私は何か間違ったことをしていますか?

OS: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 が発生した理由 (アクセス違反など) を含め、可能な限り多くの BSoD の内容を貼り付けることも役立つ場合があります。直接的には役に立ちませんが、いくつかの手がかりを提供します。

于 2010-04-17T16:26:43.020 に答える
1

エラー コードは典型的な BSOD コードではありません。STATUS_PAGEFILE_QUOTA、「プロセスのページファイル クォータを使い果たしました。」

これを Windows の 64 ビット バージョンで取得することは可能です。64 ビット プログラムはメモリ不足になることはありません。16 テラバイトの仮想メモリがあります。最初に、マップ可能なメモリ ページが不足します。オペレーティング システムは、プログラムが占有できるページング ファイル サイズの上限を設定します。あなたはそれを超えました。本当に BSOD である場合は、カーネル メモリ プールのスペースが不足している可能性があります。作成する各スレッドには、カーネル スタック用に約 24 KB のメモリが必要です。

あなたのプログラムが作成しているスレッドが多すぎると推測する必要があります。Taskmgr.exe の [プロセス] タブの [スレッド] 列に注目してください。[パフォーマンス] タブには、カーネル メモリ プールに何が起こっているかが表示されます。

于 2010-04-17T17:21:54.773 に答える