IEnumerable<>を使用するときにメモリオーバーフローを防ぐ方法とLinq-To-Sql?

StackOverflow https://stackoverflow.com/questions/1034429

質問

この質問は、私の以前の質問

に関連しています

これが私の現在のコードです

 IEnumerable<Shape> Get()
 {
     while(//get implementation
         yield return new Shape(//...
 }

 void Insert()
 {
       var actual = Get();
       using (var db = new DataClassesDataContext())
       {
           db.Shapes.InsertAllOnSubmit(actual);
           db.SubmitChanges();
       }
 }

IEnumerableが大きすぎるため、メモリオーバーフローが発生しています。どうすれば防ぐことができますか?

役に立ちましたか?

解決

<ではなく InsertOnSubmit を使用してみてくださいhref = "http://msdn.microsoft.com/en-us/library/bb763476(VS.100).aspx" rel = "nofollow noreferrer"> InsertAllOnSubmit 。そして、Erichが言ったように、適切な間隔でコミットします。

または、たとえば、 5、 Handcraftsman's または dtbのIEnumerableのIEnumerableを取得するためのソリューション。たとえば、dtbのチャンク:

   var actual = Get();
   using (var db = new DataClassesDataContext())
   {
       foreach(var batch in actual.Chunk(5))
       {
         db.Shapes.InsertAllOnSubmit(batch);
         db.SubmitChanges();
       }
   }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top