Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 108,456

HOME > .NET Framework > Forum > สอบถามการ Query ข้อมูล 5 แสน record ออกมาเป็น Excel



 

สอบถามการ Query ข้อมูล 5 แสน record ออกมาเป็น Excel

 



Topic : 127346



โพสกระทู้ ( 34 )
บทความ ( 0 )



สถานะออฟไลน์




สวัสดีครับ

ผมมีเรื่องสอบถามการ Query ข้อมูลขนาด 5 แสน Record ให้มัน Export ออกมาเป็นไฟล์ Excel ได้

ผมได้ลองทำแล้ว เกิด Error throw out of memory exception

พอจะมีแนวทางไหนบ้างที่สามารถ เอา


ขอบคุณครับ



Tag : .NET, Ms SQL Server 2012, LINQ, MVC, C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-04-25 14:34:31 By : asdoo1000 View : 862 Reply : 10
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ใช้ Library ตัวไหนครับ เข้าใใจว่ามันน่าจะเยอะเกินไปจน Memory เต็มครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-25 14:57:53 By : mr.win
 


 

No. 2



โพสกระทู้ ( 4,071 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

thread หรือ task ก็เป็นรึครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-25 14:59:04 By : lamaka.tor
 

 

No. 3



โพสกระทู้ ( 34 )
บทความ ( 0 )



สถานะออฟไลน์


สวัสดีครับ

ผมใช้ Library EPPlus คือผมให้มัน loop ข้อมูลไปเลื่อยๆ จนหน้าเว็บ Error memory นั้นแหละครับ

thread หรือ task ก็เป็นรึครับ
= อันนี้ยังไม่ได้ลองใช้ ถ้าลองทำแล้วจะแจ้งเพิ่มเติมนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-25 16:19:09 By : asdoo1000
 


 

No. 4



โพสกระทู้ ( 4,071 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

เราสามารถแยกซัก 50 thread เป็น thread ละ หมื่น แยกกันทำงานใน excel 1 ไฟล์ จะเร็วขึ้นไม๊ครับ

อันนี้เดาแบบไม่ไมีความรู้ล้วนๆ 555
ปกติผม จัดไฟล์ karaoke ก็เกือบ 5-10 ล้านอ่าครับ แบ่ง 100 thread จัดแบบนี้แหละ

เท่าที่ทำไม่ค่อยมีปัญหาครับ
ลบไปเหลือจริงๆแค่ ไม่ถึงแสนเพลงเอง 5555
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-25 16:54:56 By : lamaka.tor
 


 

No. 5



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

คงจะต้องแยก Process ครับ เช่น เขียนไปซะ 50,000 ก็หยุดแล้วปิด Object ไปก่อนครับ จากนั้นค่อยเปิดมาแล้วเขียนต่อครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-26 09:32:07 By : mr.win
 


 

No. 6



โพสกระทู้ ( 819 )
บทความ ( 0 )



สถานะออฟไลน์


ลองดูอันนี้ครับ
http://stackoverflow.com/questions/33264040/epplus-save-two-million-rows-with-200-columns-datatable-to-multiple-excel-files
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-26 10:55:56 By : fonfire
 


 

No. 7



โพสกระทู้ ( 34 )
บทความ ( 0 )



สถานะออฟไลน์


สวัสดีครับ

ขอบคุณครับสำหรับคำแนะนำนะครับ

ตอบความคิดเห็นที่ : 4 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-25 16:54:56
รายละเอียดของการตอบ ::
ผมได้ใช้ Task โดยลองเขียนแบบ Console ดูให้มันแบ่ง ไฟล์ ใน Excel

โดยเอาตัวอย่าง ตาม URL ด้านล่าง

http://stackoverflow.com/questions/33264040/epplus-save-two-million-rows-with-200-columns-datatable-to-multiple-excel-files

ก็สามารถใช้งานได้ไม่มีปัญหาเรื่อง Memory แต่จะพบในเริ่องการ Query ข้อมูลจาก Database ช้า ครับ

และตอนนี้กำลัง แก้ไขโดยแบ่งการ Select ออกเป็นก้อนๆ ตามที่ พี่ mr.win แนะนำ

ขอบคุณครับ




ตอบความคิดเห็นที่ : 5 เขียนโดย : mr.win เมื่อวันที่ 2017-04-26 09:32:07
รายละเอียดของการตอบ ::
สวัสดีครับ ผมใช้วิธีแบบที่พี่แนะนำนั้นแหละครับ ซึ่งก็ยังมีปัญหาในเริ่องการ Query ข้อมูลจาก Database ช้า คือ Query 50,000 ROW ใช้เวลาประมาณ 1 นาทีกว่าๆ

ผมเลยคิดว่าจะ วิธีเปลี่ยนจาก Query ผ่านหน้าเว็บ เป็นใช้ทำผ่าน Console โดยให้หน้าเว็บกรอกฟอร์มเสร็จก็รอ Link Download ไฟล์ Excel ผ่าน E-mail แทนครับ

ขอบคุณครับ



ซึ่งถ้าพี่ๆ มีคำแนะนำหรือมีแนวทางใหม่ๆ ผมจะลองกลับไปทำดูครับ

ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-27 16:51:53 By : asdoo1000
 


 

No. 8



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

หลังจากที่ Query เสร็จ จับยัดทันลงพวก DataTable,List แล้วค่อยไป Loop เพื่อ Generate Excel ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-27 17:00:47 By : mr.win
 


 

No. 9



โพสกระทู้ ( 34 )
บทความ ( 0 )



สถานะออฟไลน์


สวัสดีครับ

ตอบความคิดเห็นที่ : 8 เขียนโดย : mr.win เมื่อวันที่ 2017-04-27 17:00:47
รายละเอียดของการตอบ ::
ผมใช้ Entity Framework ในการ query แล้วให้มันเป็น ToArray ตาม code ด้านล่าง

Code (C#)
int CurrentPagenumber = 1;
int Checkloop = 50000;
int temp = (CurrentPagenumber - 1) * Checkloopa;
var query = db.page.OrderBy(o => o.datetime).Skip(temp).Take(Checkloop).ToArray();

var fileInfo = new FileInfo(Path.GetTempPath() + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx");  
while(true)
{
if (query.Count() > 0)
{
     break;
}

using (var excel = new ExcelPackage(fileInfo))
{
     excel.Workbook.Properties.Author = "Report"; 
     excel.Workbook.Properties.Title = "Export Realtime";
     var sheet = excel.Workbook.Worksheets.Add("page"+i);
     sheet.Cells[1, 1].LoadFromCollection(query, true);
     workSheet.Cells["A:A"].Style.Numberformat.Format = "yyyy-mm-dd HH:mm:ss";
     workSheet.Cells["A:F"].AutoFitColumns();
     excel.Save();
}

i++;
}





ประวัติการแก้ไข
2017-04-28 10:39:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-28 10:39:31 By : asdoo1000
 


 

No. 10



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-28 11:33:44 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามการ Query ข้อมูล 5 แสน record ออกมาเป็น Excel
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม , สำนักงานบัญชี , รับจดทะเบียนบริษัท , Pangpond , รถมือสอง

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2020 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่