Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: hỏi về [serializable] và [synchronization]

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    77

    Mặc định hỏi về [serializable] và [synchronization]

    mình đọc sách biết
    [serializable] :Marks a class or structure as being “serializable,” meaning it is able to persist its current state into a stream.

    [synchronization] : .....

    các bạn giúp mình hiểu về nó 1 chút dc ko

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    8

    [Serializable] là một Attribute để đánh dấu một đối tượng có khả năng tuần tự hóa, được sử dụng khi bạn cần chuyển dữ liệu vào một file để lưu trữ hoặc chuyển dữ liệu qua mạng...
    Tùy theo từng mục đích có các loại serializable khác nhau, mình xin ví dụ về Serialization một class để lưu trữ vào trong một file, nhớ imports namespace:
    Visual C# Code:
    1. using System.Runtime.Serialization.Formatters.Binary;
    2. using System.IO;

    Visual C# Code:
    1.     [Serializable]
    2.     class Person
    3.     {
    4.         public string Name;
    5.         public int Age;
    6.         public Person(string name, int age)
    7.         {
    8.             this.Name = name;
    9.             this.Age = age;
    10.         }
    11.     }
    12.  
    13.            //Trước tiên phải tạo một luồng đến file.
    14.            Stream stream = new FileStream(@"C:\Test.btc", FileMode.OpenOrCreate);
    15.             Person p = new Person("Thanh Chung", 20);
    16.             // đổi tượng BinaryFormatter được sử dụng cho quá trình tuần tự hóa nhị phân.
    17.             BinaryFormatter formatter = new BinaryFormatter();
    18.             //Phương thức Serialize để thực thi tuần tự hóa.
    19.             formatter.Serialize(stream, p);        
    20.             Console.ReadLine();
    OK, bây giờ bạn hãy F5 sau đó thì mở ổ C ra, một file có tên Test.btc đã được tạo, bây giờ ta sẽ tiến hành đọc dữ liệu từ file này, ta thực hiện quá trình ngược lại: Deserialize
    Visual C# Code:
    1.            Stream stream = new FileStream(@"C:\Test.btc",          FileMode.OpenOrCreate);            
    2.             BinaryFormatter formatter = new BinaryFormatter();  
    3.             quá trình Deserialize ngược với quá trình Serialize, trả về một object, bạn nhớ ép kiểu để sử dụng.          
    4.             Person p = formatter.Deserialize(stream) as Person;
    5.             Console.WriteLine(p.Name);
    6.             Console.WriteLine(p.Age.ToString());
    7.             Console.ReadLine();

    [Synchronization] là một Attribute áp dụng cho các đối tượng dẫn xuất từ System.ContextBoundObject , sau khi được áp dụng thuộc tính này, đối tượng sẽ được bảo vệ thực thi một cách đồng bộ, tránh được sự tranh chấp tài nguyên giữa các Thread, cũng giống như bạn thực hiện kĩ thuật lock vậy, khác là tất cả được thực hiện một cách tự động.
    Ví dụ:
    Trước tiên bạn khai báo imports namespace:
    Visual C# Code:
    1. using System.Runtime.Remoting.Contexts;
    2. using System.Threading;

    Visual C# Code:
    1.     class Program
    2.     {
    3.         static void Main(string[] args)
    4.         {
    5.             new AutoLock().Test();
    6.         }      
    7.     }
    8.  
    9.     [Synchronization]
    10.     public class AutoLock : ContextBoundObject
    11.     {
    12.         public void Demo()
    13.         {
    14.             Console.Write("Start...");
    15.             Thread.Sleep(1000);
    16.             Console.WriteLine("end"); // lock được thực hiện tự động.
    17.         }
    18.         public void Test()
    19.         {
    20.             new Thread(Demo).Start();
    21.             new Thread(Demo).Start();
    22.             new Thread(Demo).Start();
    23.             Console.ReadLine();
    24.         }
    25.     }

    Đoạn code trên tương đương với (Bỏ đi thuộc tính [Synchronization])
    Visual C# Code:
    1.         public void Demo()
    2.         {
    3.             lock (this)
    4.             {
    5.                 Console.Write("Start...");
    6.                 Thread.Sleep(1000);
    7.                 Console.WriteLine("end");
    8.             }
    9.         }
    Bạn có thể tham khảo thêm về [Synchronization]
    http://www.eggheadcafe.com/software/...attribute.aspx
    Đã được chỉnh sửa lần cuối bởi thanhchungbtc : 06-01-2009 lúc 10:10 PM.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    77

    ok thanks bạn

  4. #4
    Ngày gia nhập
    01 2008
    Bài viết
    240

    thực sự tớ không hiểu lắm.Cậu có thể cho tớ 1 ví dụ mà bắt buộc phải Serialization 1 đối tượng trước khi lưu vào file. vì mình cứ lưu 1 cái gì đó vào file rồi lát sau mình mở nó ra đọc bình thường,

    Chú ý: Không quote cả bài viết dài như vậy.
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 10-01-2009 lúc 11:03 AM.
    Time

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    77

    cho mình hỏi lại synchornization chút
    Mình đọc kỹ sách thấy 2 vấn đề :
    1> khi đc apply [Synchronization] thì nó trở thành thread-safe (vì sao ?)
    2> khi derive from ContextBoundObject thì CLR does not move its method object outside of a synchronized context (giải thích giùm mình vì sao ko move ra ngoài synchronized context)
    thanks

  6. #6
    Ngày gia nhập
    02 2009
    Bài viết
    7

    Mặc định hỏi về [serializable] và [synchronization]

    Trích dẫn Nguyên bản được gửi bởi nthung Xem bài viết
    thực sự tớ không hiểu lắm.Cậu có thể cho tớ 1 ví dụ mà bắt buộc phải Serialization 1 đối tượng trước khi lưu vào file. vì mình cứ lưu 1 cái gì đó vào file rồi lát sau mình mở nó ra đọc bình thường,

    Chú ý: Không quote cả bài viết dài như vậy.
    Dùng Serialization để đọc những file có dung lượng hàng Gb, hoặc là truyền qua mạng vì thời gian thực hiện lâu. Đặc biệt được sd khi truyền file qua mạng.
    Bạn có thể tham khảo thêm ở đây:
    http://my.opera.com/hapn2/blog/net-serialization
    Đã được chỉnh sửa lần cuối bởi blue_eagle_uit : 03-03-2009 lúc 11:20 PM.

  7. #7
    Ngày gia nhập
    03 2012
    Bài viết
    41

    ủa anh ơi cho em hỏi là e ghi nhiều dữ liệu xuống thì làm thế nào ạ?
    vd e thêm nhiều như thế này
    Person p1 = new Person("Thanh Chung 1", 20);
    Person p2 = new Person("Thanh Chung 2", 21);
    Person p3 = new Person("Thanh Chung 3", 22);

    nếu ghi xong rùi đọc lên như thế nào?tại nó nhiều mẫu tin rùi mình dùng gì để lấy lên?

Các đề tài tương tự

  1. Graphic Lỗi "is not mask serializable" phải làm sao ??????????
    Gửi bởi bongden27 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 27-11-2011, 08:45 PM
  2. Linux Multi-process synchronization ?
    Gửi bởi haian trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 9
    Bài viết cuối: 28-04-2011, 06:34 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn