How to prevent memory overflow when using an IEnumerable and Linq-To-Sql?

后端 未结 4 714
旧时难觅i
旧时难觅i 2021-01-16 02:53

This question is related to a previous question of mine

That\'s my current code

 IEnumerable Get()
 {
     while(//get implementation
           


        
4条回答
  •  鱼传尺愫
    2021-01-16 03:31

    Try using InsertOnSubmit rather than InsertAllOnSubmit. And then commit at appropriate intervals, like Erich said.

    Or, if you want to do it in batches of e.g. 5, try Handcraftsman's or dtb's solutions for getting IEnumerable's of IEnumerable. E.g., with dtb's Chunk:

       var actual = Get();
       using (var db = new DataClassesDataContext())
       {
           foreach(var batch in actual.Chunk(5))
           {
             db.Shapes.InsertAllOnSubmit(batch);
             db.SubmitChanges();
           }
       }
    

提交回复
热议问题