 |
|
ขอคำชี้แนะ 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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|