- - PR -
高負荷時のテキストファイル書き込みで例外が発生する
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-31 02:17
お世話になります。
C#.NETで作成したDB登録モジュール(.exe)を実行することにより、 DB(SQLServer2000)に3000件のCSVレコードをCSV1レコードにつき1回SQL文を発行してINSERT又はUPDATEしています(都合によりBCPは使用できません)。この際、SQL発行の前後でテキストファイルにログ出力(ログ出力専用クラスのstaticメソッドでテキストファイルに出力)しているのですが、4000件以上のCSVレコードを処理しようとすると以下の例外が発生します。 「オブジェクト参照がオブジェクト インスタンスに設定されていません」 1000件程度ならこの例外は発生せずに、上記モジュール実行で正常終了します。 件数に関係なく正常終了させたいのですが、上記例外を回避する方法はありますで しょうか。ご存知の方がいましたら、是非ご教授願います。 ※実行環境 OS:Windows2000ServerSp3 メモリ:1GB HDD構成:RAID-5 .NET Framework 1.1 | ||||
|
投稿日時: 2006-01-31 02:29
この例外は、"どれ" に対して発生していますか? それと、static メソッドに不具合がないのか、これだけの情報では判断できないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-31 10:16
じゃんぬねっとさんレスありがとうございます。
情報不足ですいませんでした。 1.staticメソッドに不具合はありません。 2.例外はログ出力をするstaticメソッド内で、 Mutexオブジェクトをnewする際に例が発生しています。 ソースの抜粋を以下に示します。 このロジックが数千回繰り返された場合に例外が発生します。 ・ ・ // iniファイルからログ出力フォルダを取得 m_strTrcLogPath = MtnetUtil.GetStringValue(MtnetConst.SECTION_PATH ,MtnetConst.TRACE_LOGFILE_PATH ,""); ・ ・ //排他制御 → 【ここで例外が発生します】 Mutex objMutex = new Mutex(bolOwnership, strLogName, out bolCreatedNew); ・ ・ //ログ出力 fsFileStream = new FileStream(m_strFullFileName,FileMode.Append); swStreamWriter = new StreamWriter(fsFileStream,System.Text.Encoding.GetEncoding("shift-jis")); swStreamWriter.WriteLine(sbLogText.ToString()); swStreamWriter.Close(); | ||||
|
投稿日時: 2006-01-31 10:40
Mutex の解放ってどうやってるんですか? 高負荷にならないように、スレッドを一時的に休止するなどしてテストする必要もあるでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-31 10:43
Mutexの解放は、ログ出力メソッドのfinally句で
以下のように行っています。 if (!objMutex == null) { objMutex.ReleaseMutex(); objMutex.Close(); objMutex = null; } | ||||
|
投稿日時: 2006-01-31 11:05
ん?
if (!objMutex == null) それはコンパイルできます? _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-01-31 11:52
転記ミスかな。(コピペして下されば良いのに) if (objMutex != null) ですね。 とりあえず、高負荷にならないようにテストして検証して欲しいですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-31 21:44
何のために Mutex を使っているのでしょう?排他処理なら、 Mutex よりファイルの排他処理でいいのでは?
また、Mutex を new する行で発生しているなら、objMutex が null ではなく、コンストラクタの引数のどれかが null ってことですよね? ついでに、ハンガリアン記法もねぇ。。。 |
1|2|3|4
次のページへ»