2009-09-22 14 views
3

私は基本的なforeachループを持っており、データベースへの接続とデータの挿入を行う静的メソッドを呼び出します。何らかの理由で、デバッグなしでアプリケーションを実行すると、コレクション内の最初のアイテムだけが反復処理されます。アプリケーションをデバッグして、ループの中にブレークポイントを設定すると、コレクション内のすべてのアイテムが反復処理されます。foreachループはリスト内のすべての項目をループしません - C#

ループにforeachループでブレークポイントとステップを設定すると、デバッグせずにアプリケーションを実行していた場合と同じ動作になります。

このタイプの動作を引き起こす原因は誰にも分かりますか?

List<MyObject> objectlist = new List<MyObject>(); 

//some code to populate list 

foreach(MyObject myobject in objectlist) 
{ 
    string a = "a"; 
    string b = "b"; 

    MyLibrary.UpdateDatabase(a, b); 
} 

更新が

プロセスが持つ任意の例外をスローしたりしません(私は、Visual Studio 2008 SP1を使用しています):ここでは

は、ソースコードの簡易版でありますアプリケーションをデバッグすることなく。

+14

問題を示す小さな完全な例を投稿してください。 –

+4

これは完全にオフになっている可能性がありますが、クリーンアップが必要な場合や、アプリケーションビンよりもデバッグビンにアセンブリのビルドが異なる場合があります。 – ryber

+1

複数のスレッドを使用していますか? –

答えて

1

メソッド呼び出しでmyobjectオブジェクトが使用されていないため、アプリケーションをデバッグしていないときにループが繰り返されませんでした。

私のソースコードは次のようになります。私にとって

List<MyObject> objectlist = new List<MyObject>(); 

//some code to populate list 

foreach(MyObject myobject in objectlist) 
{ 
    MyLibrary.UpdateDatabase(myobject.a, myobject.b); 
} 
+0

説明があれば元の質問を更新してください。 ) – peterchen

+0

この回答は十分な説明ではありませんか? –

4

私の推測では、各行を踏んで時間を増やすと、コードの動作が異なっている可能性があります。 (おそらくデータベースのため)

例外が発生していないことを確認してください(Console.WriteLineまたはMessageBox.Showを呼び出すキャッチブロックを置き、何か起こっているかどうかを確認してください)。

データベースのログを調べ、そこに興味深いものがあるかどうかを確認します。

また、メソッドの完全なソースを投稿してください。

+2

例外のデバッグブレークを有効にすると、これらの種類のものを見つけるのに最適です - http://msdn.microsoft.com/en-us/library/d14azbfh.aspx – RichardOD

+0

はい、しかし彼それは主にデバッガの下で動作していないときに発生するので、それだけでは十分ではないと言います。 – SLaks

+0

私は「メソッドが例外をスローしていないことを確認してください」というコメントを投稿しました。私は答えを投稿していません... – RichardOD

2

通常、正常に実行されているコードとデバッグで実行中のコードの違いがある場合は、セキュリティコンテキストに関連しています。

プロセス内で実行されているコードは、そのプロセスのセキュリティコンテキストで実行されます。デバッグモードで実行されているコードは、デバッグを行っているユーザーのセキュリティコンテキストで実行されます。

権限の不足のため、コードが正常に実行されたときに、データベースの呼び出しが失敗する可能性があります。ループが1回だけ実行されるように見えます。

0

それは例外のように聞こえます。ちょうど確かに、あなたはDebugのすべてをチェックしましたか?Onの例外?

関連する問題