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

Registered : 109,037

HOME > .NET Framework > Forum > ขอแนวคิดในการ set value ให้ properties ของ class หน่อยครับ [vb.net]



 

ขอแนวคิดในการ set value ให้ properties ของ class หน่อยครับ [vb.net]

 



Topic : 093727



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

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

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




เรื่องมันมีอยู่ว่าผมกำลังทำโปรแกรมสำหรับรองรับภาษาอะไรก็ได้บนโลก
โดยเริ่มต้นจะเป็นภาษาอังกฤษ ผมจึงสร้าง class ขึ้นมามี property อยู่ราวๆ 15,000
(หมายความว่า เก็บคำได้ 15,000 คำ) โดยแต่ละ property จะมีค่าว่างไว้ก่อน
และจะ set ค่าให้ property เหล่านั้นเมื่อเปิดโปรแกรม โดยค่าที่นำมา set จะเก็บไว้ใน xml ไฟล์
กระบวนการ คือ
1. ใช้ datatable อ่าน xml ไฟล์ใช้เวลาไม่ถึง 1 วินาที
2. ลูปเพื่อ set ค่าให้กับแต่ละ property โดยใช้คำสั่งดังนี้
Code (VB.NET)
        Dim pType As Type = GetType(CurrentLanguage)
        For Each dr As DataRow In gResourceTable.Rows
            Dim name As String = dr("ResKey").ToString
            Dim value2 As String = dr("ResDefualtText").ToString
            Try
                Dim pro As Reflection.PropertyInfo = pType.GetProperty(name, GetType(String))
                pro.SetValue(gResourceClass, value2, Nothing)
                pro = Nothing
            Catch
            End Try
        Next
        pType = Nothing


** คำอธิบาย
- CurrentLanguage เป็น Class ที่ว่าเก็บ Property 15,000 ค่า
- gResourceTable เป็น Datatable ที่ใช้อ่าน xml ไฟล์ขึ้นมา
- gResourceClass เป็น Object ของ CurrentLanguag ตั้งเป็น Public

เมื่อนำไปใช้จะใช้ดังนี้ เช่น
Me.lblUserName.Text = gResourceClass.UserNameWithColon
Me.lblPassword.Text = gResourceClass.PasswordWithColon


ปัญหามีอยู่ว่า
เมื่อเปิดโปรแกรมจะให้แสดง splash screen เพื่อลูป set ค่าให้กับแต่ละ property ใช้เวลาประมาณ 15 วินาที
เครื่องที่ใช้เทส Win 7 / Ram 4 GB / Core i5 ยังนานขนาดนี้

การแก้ปัญหาที่ทดลองทำแล้ว คือ เก็บค่ามันไว้ใน DataTable นั่นหละไม่ต้องลูปเมื่อเปิดโปรแกรม
แต่เวลาจะเอามาใส่ให้ label ก็ใช้ LINQ ไปเอาค่ามาจาก DataTable คราวนี้มาช้าที่ Event FormLoad แทน
ฟอร์มที่มีคำเยอะๆ ( 100 - 150 คำ) ใช้เวลาโดยเฉลี่ย 7 วินาที - -*

ใครมีแนวทางที่จะทำให้มันเร็วได้ แชร์กันหน่อยนะครับ

การให้ความรู้ ย่อมชนะการให้ทั้งปวง เอ๊ะ !! มันแปลกๆนะภาษิตนี้

ขอบคุณล่วงหน้าครับ



Tag : .NET, Win (Windows App), VB.NET, VS 2008 (.NET 3.x), Windows









ประวัติการแก้ไข
2013-04-11 17:24:45
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-04-11 17:23:01 By : คนงานตัดอ้อย View : 1577 Reply : 5
 

 

No. 1



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

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

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

ใช้เป็นพวก Process Background ได้หรือเปล่าครับ คือในขณะที่ทำงานก็ค่อย ๆ อ่านไฟล์มาเก็บไว้ครับ

ผมไม่รู้ว่า Step การทำงานมันเป็นยังไง และทำไมจะต้องเอาลงครั้งเดียวตั้ง 15,000 รายการครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-12 11:58:07 By : mr.win
 


 

No. 2

Guest


www.codeproject.com
Search : monkey but fast 1, 2, 3
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-15 21:58:52 By : อาจ
 

 

No. 3

Guest


เรื่องมันมีอยู่ว่าผมกำลังทำโปรแกรมสำหรับรองรับภาษาอะไรก็ได้บนโลก
โดยเริ่มต้นจะเป็นภาษาอังกฤษ ผมจึงสร้าง class ขึ้นมามี property อยู่ราวๆ 15,000
(หมายความว่า เก็บคำได้ 15,000 คำ) โดยแต่ละ property จะมีค่าว่างไว้ก่อน
และจะ set ค่าให้ property เหล่านั้นเมื่อเปิดโปรแกรม โดยค่าที่นำมา set จะเก็บไว้ใน xml ไฟล์
กระบวนการ คือ



[/b]ผมเป็นคนไทยคนหนึ่ง ผมจำได้ว่า (บ้าง) ... ผมจำไม่ได้ว่า (รู้ว่า) ณ.ปัจจุบัน 2556-04-16 บริษัท Windows MS-Sooft จำกัด [b]มหาโลก
มันสนับสนุน ภาษาไทย (Support Thai Language) ได้ไม่เต็มหนึ่งร้อยเปอร์เซ้งต์ (100%)

----- ผมไม่รู้เหตุผลที่แท้จริง ว่าทำไม?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-16 21:11:19 By : ผ่านมา
 


 

No. 4

Guest


เก็บเป็น xml ก็ใช้ linq สิ

ไม่ต้องโหลดใส่ datatable หรอก เสียเวลา

Code (XML)
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2012-05-09T18:22:07">
<Roles>
<ID>1</ID>
<TypeID>1</TypeID>
<RoleName>Admin</RoleName>
</Roles>
<Roles>
<ID>2</ID>
<TypeID>1</TypeID>
<RoleName>Member</RoleName>
</Roles>
</dataroot>


Code (C#)
            var roles = from rt in XElement.Load(".....PATH...../Role.xml").Elements("Roles")
                     select rt;

            // Execute the query
            foreach (var role in roles )
            {
                int TypeID = Convert.ToInt32(role.Element("TypeID").Value);
                string RoleName = role.Element("RoleName").Value;
            }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-17 08:20:10 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 5

Guest


Code (VB.NET)
Imports System.Reflection
Imports System.ComponentModel

Public Class ReflectionButFaster

    Public Class CurrentLanguage
        Public Property ResKey As String
        Public Property ResDefaultText As String
        'more...
    End Class

    Protected Sub btnTestData_Click(sender As Object, e As EventArgs) Handles btnTestData.Click
        Dim x As New List(Of CurrentLanguage)

        For i As Integer = 0 To 100000 'หนึ่งแสนคำ
            x.Add(New CurrentLanguage() With {.ResKey = "Test" & i, .ResDefaultText = String.Empty})
        Next

        MsgBox("Generate Test Data Complete")

        For Each r In x
            ReflectionButFaster(r, "ResDefaultText", "Love JimThai")
        Next

        MsgBox("Change Test Data Complete")

    End Sub

    Private Shared Sub ReflectionButFaster(ByVal obj As Object, ByVal PropertyName As String, ByVal NewValue As String)
        Dim propsCollect As PropertyDescriptorCollection = TypeDescriptor.GetProperties(obj)
        propsCollect(PropertyName).SetValue(obj, NewValue)
    End Sub

End Class

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-18 18:33:40 By : ผ่านมา
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอแนวคิดในการ set value ให้ properties ของ class หน่อยครับ [vb.net]
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

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