تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] سؤال : الاستخدام الصحيح ل BackgroundWorker او Threading
#11
http://vb4arb.com/vb/showthread.php?tid=1458
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة: dubai.eig , dubai.eig
#12
لا اعلم خجم الملف الذي تتحدث عنه لكن أنصحك تستخدم Task بدلا من Backgroundworker
خاصة أن Backgroundworker أصبح موضه قديمة او أصبح تكنولوجيا قديمة

أيضا يجب عليك حين تحفظ البيانات
ان تفكر في تحويل كل شئ الي مصفوفة بايت
لنفترض مثلا ان مدخلات كل صف لديك مكوناتها كالأتي
اسم العميل
التاريخ
رقم مسلسل
الأفضل لك أن تكتبها علي هيئة Structure كالأتي

PHP كود :
Public Structure Customer

    Public Property AccessTime 
As DateTime
    Public Property Name 
As String
    Public Property ID 
As Integer

End Structure 

الأفضل لك تقوم بتحويل Structure الي مصفوفة بايت باستخدام الدالة التالية
PHP كود :
 Private Function ToBytes(Of T As Structure)(value As T) As Byte()
 
       Dim length As Integer System.Runtime.InteropServices.Marshal.SizeOf(value)
 
       Dim bytes As Byte() = New Byte(length 1) {}
 
       Dim gc As System.Runtime.InteropServices.GCHandle Nothing
        Try
            gc 
System.Runtime.InteropServices.GCHandle.Alloc(bytesSystem.Runtime.InteropServices.GCHandleType.Pinned)
 
           System.Runtime.InteropServices.Marshal.StructureToPtr(valuegc.AddrOfPinnedObject(), True)
 
       Catch ex As Exception
        Finally
            If gc
.IsAllocated Then
                gc
.Free()
 
           End If
 
       End Try
 
       Return bytes
    End 
Function 

التحويل كالأتي
هناك مميزات اضافية في هذا الأسلوب هو انك تستطيع التخكم في مصفوفة البايت بأن تشفرها أو إن تضغطها
PHP كود :
 Dim c As Customer = New Customer With {.AccessTime DateTime.Now, .ID 12345, .Name "Omar amin"}
 
       Dim values As Byte() = ToBytes(Of Customer)(c

وتخفظ فقط مصفوفة البايت في ملف الداتا بيز
ولكي تسترجع البيانات الي حالتها الأصلية
تقرأ مصفوفة البايت من ملف الداتا بيز
ثم تحولها الي Structure
باستخدام الدالة التالية
PHP كود :
   Private Function ToStructure(Of T As Structure)(bytes As Byte()) As T
        Dim result 
As Nothing
        Dim gc 
As System.Runtime.InteropServices.GCHandle Nothing
        Try
            gc 
System.Runtime.InteropServices.GCHandle.Alloc(bytesSystem.Runtime.InteropServices.GCHandleType.Pinned)
 
           result CType((CObj(System.Runtime.InteropServices.Marshal.PtrToStructure(gc.AddrOfPinnedObject(), GetType(T)))), T)
 
       Catch ex As Exception
        Finally
            If gc
.IsAllocated Then
                gc
.Free()
 
           End If
 
       End Try
 
       Return result
    End 
Function 

مثلا لتقرا سطرا واحدا من ملف الداتا بييز
مصفوفة البايت التي تم تعريفها في الكود أدناه باسم result هي التي يجب قرائتها من الداتا بيز


PHP كود :
       Dim result As Byte() = Nothing
        If result IsNot Nothing Then
            FileOperations
.DeleteFile(dNamefNamefExt)
 
           Dim cust As Customer ToStructure(Of Customer)(result)
 
           Label1.Text cust.AccessTime.ToString
            Label2
.Text cust.Name
            Label3
.Text cust.ID
        End 
If 

عموم كلما تضخم الملف عليك أن تفكر في أساليب مختلفة لحفظ البيانات
وغالبا لن تجد تكنولوجيا سريعة بما يكفي لقراءة ملفات ضخمة خاصة أني كل طريقه ولها عيوبها  أو لها مشاكلها
الأفضل هو تغيير تفكيرك في كيفية حفظ البيانات و تحول كل شئ الي مصفوفة بايت فهذا يقلل من حجم الملفات

فقط Thimk Bytes
Retired
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  سؤال عن الاسمبلي و النيم سبيس justforit 0 109 07-12-25, 12:28 AM
آخر رد: justforit
  فائدة بخصوص التعامل مع علامات التنصيص مع {سؤال} justforit 4 292 02-11-25, 11:19 PM
آخر رد: justforit
  [نقاش] سؤال MetoDas 2 1,493 20-04-25, 10:21 PM
آخر رد: Kamil
  [سؤال] سؤال ترددت قبل نشرة:طابعة الباركود لماذا تطبع أكثر من ليبل فارغ قبل السليم dr.programming 1 514 20-04-25, 09:26 PM
آخر رد: Kamil
  سؤال لو سمحتم احبتى فى الله خالد كامل1 4 811 09-02-25, 12:02 AM
آخر رد: princelovelorn
  سؤال واستفسار خالد كامل1 1 405 04-02-25, 09:31 PM
آخر رد: aliday03
  سؤال فى تقرير كريستال خالد كامل1 0 398 04-02-25, 05:50 AM
آخر رد: خالد كامل1
Question [VB.NET] هناك سؤال يهم كل مبرمج الماذا برنامجك يظهر على بعض الشاشات اكثر دقه بشكل مصغر ومشوه Microformt 0 449 01-02-25, 03:48 PM
آخر رد: Microformt
  لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى صالح عبدالله 3 335 24-12-24, 12:17 AM
آخر رد: صالح عبدالله
  [سؤال] سؤال في الكونسول justforit 1 370 21-12-24, 02:57 PM
آخر رد: aljzazy

التنقل السريع :


يقوم بقرائة الموضوع: