ขอคำชี้แนะ C# Winform ดึงข้อมูล 2 แสน Record แล้วเกิด DeadLock
Query หรือแสดงผล เยอะเกินไปหรือเปล่าครับ
Date :
2014-07-02 11:43:04
By :
mr.win
2 แสน record , 32 feild ครับ
Date :
2014-07-02 11:47:58
By :
handfoot4work
น่าจะทำ data paging loop select เก็บเข้า object list ก่อนนะครับ เพื่อไม่เป็นภาระของ server เกินไปครับ
ถูกผิดอย่างไงก็ขออภัยด้วยนะครับ
Date :
2014-07-02 12:59:19
By :
chokbunthit
เป็นเรื่องปกติของ UI Thread เมื่อเกิดเหตุกราณ์การทำงานที่ยาวนาน หน้า UI จะค้าง ถ้าไม่มีการ update บอกที่หน้า UI เลย จะเกิดเหตุกราณ์ ContextSwitchDeadlock
แก้ได้โดย (วิธีนี้ไม่แนะนำ) ให้ไปเปิดเมนู Debug >> Exceptions >> เลือกที่ Managed Debugging Assistants >> เลือกเข้าไปที่ ContextSwitchDeadlock เอาเครื่องหมายถูกออก เพื่อปิด Exception นี้ทิ้ง
อีก 1 วิธีที่ควรจะทำ เป็นหลักการบอกสถานะ pump message ออกมาที่หน้า UI คล้ายๆ การทำ Application.DoEvent หรือไม่ก็เขียนออกมาอีก 1 Thread แล้วปล่อยให้ Process ทำงานแยกกัน กรณีหลังหน้า UI จะไม่ค้างและมีการ Update Process ตลอดเวลา
Date :
2014-07-02 14:17:57
By :
gunnermontana
ขอบคุณทุกท่านที่มาให้ความรู้ใหม่ๆนะครับ เนื่องจากผมเรียนรู้ด้วยตนเอง อาจจะไม่ค่อยเข้าใจศัพท์บางอย่าง หรือวิธีทีบางท่านแนะนำนะครับ
เลยขอรบกวนขอเรียนถามต่อหน่อยครับ
1.data paging loop select ทำยังไงครับ ขอ link หรือ sourcecode ตัวอย่างไปศึกษาต่อได้ไหมครับ
ถ้าเข้าใจไม่ผิด เป็นการวนแบบใส่ limit 0,500 -> limit 1000,500 แบบนี้ที่คำสั่ง sql หรือเปล่าครับ
2.การเขียนออกมาอีก 1 Thread แล้วปล่อยให้ Process ทำงานแยกกัน ทำยังไงครับ ขอ link หรือ sourcecode ตัวอย่างไปศึกษาต่อได้ไหมครับ
ขอบคุณครับ
Date :
2014-07-02 22:07:21
By :
handfoot4work
ขอบคุณทุกท่านครับ ที่มา share ความรู้ช่วยผม
Date :
2014-07-03 16:05:54
By :
handfoot4work
data paging loop select ก็ประมาณนี้นะครับ
1. count จำนวน row ที่จะค้นหา สมมุตินะ ได้มาสัก 1,000,000 row
2. ต้องการแสดงครั้งละ 100000 row ก็จะได้ 1,000,000/ 100,000 = 10 หน้า
3. เราก็ loop 10 ครั้งตามจำหน้าที่ได้มา
query ตัวอย่าง อันนี้ไม่เกี่ยวกับการเขียนโปรแกรมเป็นส่วนของ query เท่านั้น
Code (SQL)
declare @rowsPerPage as bigint;
declare @pageNum as bigint;
set @rowsPerPage=100000;
set @pageNum=1;
With SQLPaging As (
Select Top(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY OrderID asc)
as resultNum, *
FROM [Order Details] )
select * from SQLPaging with (nolock) where resultNum > ((@pageNum - 1) * @rowsPerPage)
Date :
2014-07-03 22:01:47
By :
chokbunthit
Load balance : Server 02