منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : MemoryMappedFile
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
معلومة سريعة

الدوت نت به كلاس اسمه MemoryMappedFile هذا الكلاس يسمح لمن يستخدمه انه يكتب اي بيانات الي ملف و يقرأ نفس البيانات من نفس الملف
و هذا الملف الذي يتم يناؤه بهذا الكلاس بشكل عام يتم إنشاؤه في ذاكرة الكمبيوتر

و هذا مثال بسيط عن كيفية كتابة تكست الي ملف و القراءة منه في نفس الوقت باستخدام هذا الكلاس

PHP كود :
   Private Function MapString(fileName As Stringvalue As StringOptional capacity As Long 1024) As String
        Dim result 
As String ""
 
       SyncLock New Object

            Using mmf 
MemoryMappedFile.CreateNew(fileNamecapacity)
 
               Using viewStream As MemoryMappedViewStream mmf.CreateViewStream()
 
                   Dim writer As BinaryWriter = New BinaryWriter(viewStream)

 
                   writer.Write(value)
 
               End Using
                Using viewStream 
As MemoryMappedViewStream mmf.CreateViewStream()
 
                   Dim reader As BinaryReader = New BinaryReader(viewStream)
 
                   result += reader.ReadString()
 
               End Using
            End Using
        End SyncLock

        Return result
    End 
Function 


الكود التالي يوضح كيفية استخدام الدالة أعلاه

PHP كود :
       ' يمكنك استخدام اسم الملف باي اسم تريده و ليس شرطا ان بكون له امتداد
        Dim s As String = MapString("any file name", "Visual basic For Arab") 

ما لفت انتباهي في هذا الكلاس أنك طالما تستطيع كتابة string فأنت تستطيع كتابة اي شئ اخر مثل مصفوفة String او Dictionary أو حتي DataTable

الكود التالي يوضح كيفية استخدام الكلاس في كتابة مصفوفة

PHP كود :
  Private Function MapList(fileName As Stringvalue As List(Of String), Optional capacity As Long 1024) As List(Of String)
 
       Dim result As List(Of String) = Nothing
        SyncLock 
New Object

            Using mmf 
MemoryMappedFile.CreateNew(fileNamecapacity)
 
               Using viewStream As MemoryMappedViewStream mmf.CreateViewStream()
 
                   Dim writer As BinaryWriter = New BinaryWriter(viewStream)
 
                   writer.Write(value.Count)
 
                   For Each current As String In value
                        writer
.Write(current)
 
                   Next
                End Using
                Using viewStream 
As MemoryMappedViewStream mmf.CreateViewStream()
 
                   Dim reader As BinaryReader = New BinaryReader(viewStream)
 
                   result = New List(Of String)()
 
                   Dim count As Integer reader.ReadInt32()
 
                   For i As Integer 0 To count 1
                        Dim s 
As String reader.ReadString()
 
                       result.Add(s)
 
                   Next
                End Using
            End Using
        End SyncLock

        Return result
    End 
Function 

الكود التالي يوضح كيفية الاستفادة من الدالة أعلاه
والكتابة الي تكست بوكس

PHP كود :
       Dim strings As String() = MapList("anyfileNam", New List(Of StringFrom {"Mohammed""Abu Bakr""Omar""Othman""Ali"}).ToArray

        For Each s 
As String In strings
            Me
.TextBox1.AppendText(Environment.NewLine)
 
       Next 

عموما الاسلوب هذا ممكن استخدامه بأساليب كثيرة
مثلا ممكن تكتب الدوال في فضاء اسماء مختلف و تقرأ من فضاء أسماء أخر تماما
بدون أن تقوم بإظهار المصفوفة أو String كما في الأمثلة أعلاه

يمكنكم الإطلاع علي مزيد من التفاصيل عن الكلاس في الرابط التالي
الدوال اعلاه مختلفة قليلا عن الكود الموجود في الرابط الخاص بمايكروسوفت
طبعا مايكروسوفت مستحيل تشرح شئ بالتفصيل المناسب للناس

المرجع

الرابط

أتمني يكون الموضوع مفيدة للبعض منكم