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

Đề tài: Native Image Generator(Ngen) cơ chế và cách triển khai để tiết kiệm bộ nhớ?

  1. #1
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Mặc định Native Image Generator(Ngen) cơ chế và cách triển khai để tiết kiệm bộ nhớ?

    Chào mọi người,
    Hiện tại mình đang làm một dự án mà trong đó vấn đề bộ nhớ đang gặp khó khăn.
    Thực tế là ứng dụng của bọn mình sẽ chạy trên citrix và cung cấp nhiều instance cho users.
    Nhiều lúc 1 instance chiếm dụng bộ nhớ lên đến 1.5GB dẫn đến quá tải phần cứng vào user bị kickout.

    Cách làm hiện tại là bọn mình chọn phương án sử dụng bộ tool của .Net là Ngen. Tuy nhiên, kiến thức cũng như những practise về tool này còn quá ít. Mà bọn mình cũng chưa thể chứng minh giải quyết vấn đề bộ nhớ ra sao. Và các vấn đề rủi ro sẽ xảy ra thế nào?

    Vậy mình muốn nhờ ai đó đã từng làm qua Ngen, có thể hướng dẫn, truyền đạt ít kinh nghiệm về cơ chế cũng như những lợi ích và cách triển khai với Ngen.

    Mong được giúp đỡ.

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Kevin không nghiên cứu nhiều về .NET tuy nhiên theo MSDN:

    Trích dẫn Nguyên bản được gửi bởi MSDN for .NET 2.0
    The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. The runtime can use native images from the cache instead using the just-in-time (JIT) compiler to compile the original assembly.

    Normally, the native image service is initiated by the installation program (installer) for an application or update. For priority 3 actions, the service executes during idle time on the computer. The service saves its state and is capable of continuing through multiple reboots if necessary. Multiple image compilations can be queued.
    Kevin có thể dịch lại và diễn đạt cho bạn như sau:
    Trích dẫn Nguyên bản được gửi bởi Kevin Hoang
    Native Image Generator (Ngen.exe) là công cụ tăng hiệu năng thực hiện của các ứng dụng managed (Hay còn gọi là .NET Applications). Ngen.exe tạo ra các native images, là các file chứa mã máy của các processor cụ thể được compile sẵn cài đặt vào native image cache trên máy tính. Quá trình thực hiện (runtime) có khả năng sử dụng native images từ cache thay cho việc sử dụng just-in-time (JIT) compiler để compile assembly gốc.

    Thông thường, native image service được khởi tạo trong quá trình cài đặt hoặc update bằng M$ installer. Đối với quyền ưu tiên xử lý là 3 (mặc định), dịch vụ này sẽ thực hiện trong thời gian máy tính nhàn rỗi. Dịch vụ lưu lại trạng thái và khả năng tiếp tục thông qua nhiều lần khởi động nếu cần thiết (Nghĩa là, có thể việc compile các native image đòi hỏi nhiều lần khởi động). Quá trình biên dịch nhiều image có thể được sắp xếp trong queue (Nghĩa là xử lý theo thứ tự trước sau)
    Nhận xét với vấn đề của bạn:
    Kevin không hiểu chính xác vấn đề của bạn, nhưng Kevin thấy Ngen không thể giải quyết được vấn đề của bạn. Ngen chỉ có thể hỗ trợ bạn tăng hiệu năng thực hiện thông qua việc tạo ra một số native images. Mặc định, dịch vụ này không có tác dụng ngay trong lần sử dụng phần mềm đầu tiên, quá trình tạo native images dựa vào thời gian máy tính nhàn rỗi.

    Sử dụng: Cứ cài đặt dịch vụ, còn lại dịch vụ sẽ tự động làm việc. Để có thể tương tác, bạn cần sử dụng command line để tiến hành.

    Ví dụ: (với MyProgram1 là tên file ở thư mục hiện tại)
    ngen uninstall MyProgram1
    ngen install MyProgram1 /queue : 2
    ngen update /queue

    Nếu bạn muốn thực hiện ngay, không đợi native image service thì có thể sử dụng lệnh:
    ngen executeQueuedItems 2

    Lưu ý: install và update bắt buộc phải có tham số /queue

    Thông tin priority như sau:
    1: Thực hiện ngay không chờ đợi
    2: Cũng thực hiện ngay nhưng phải đợi tất cả item có priority là 1 thực hiện xong
    3: Chỉ thực hiện khi máy tính nhàn rỗi

    Cơ bản là thế, chỉ là công cụ nên rất đơn giản để sử dụng. Cố gắng tìm hiểu thêm trên MSDN.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Thanks admin nhé. Bận rộn thế mà vẫn đầu tư gỡ khó khăn cho mem.
    Cũng giống như nhận xét của admin, bản thân mình cũng đang rất hoài nghi về khả năng tiết kiệm memory của cái tool này.
    Nhưng thực ra cả tuần vừa rồi đến bây giờ bọn mình đã đầu tư nghiên cứu nhiều, cày gần hết resource có trên mạng nói về Ngen, cũng có vài tài liệu chính thống kết luận về khả năng giảm được working-set. Đúng là nó chủ yếu góp phần để tăng tốc khởi động ứng dụng nhưng bên cạnh đó nó còn thể hiện tính shareable của một số assembly tài nguyên. Bạn tham khảo link này nhé (do khách hàng bên Mỹ giới thiệu)
    http://blogs.msdn.com/b/morgan/archi...or-citrix.aspx

    Ngoài ra mình còn có đọc thêm quyển CLR via C# 3.0 của Jeffey Richter, trong đó cũng nhấn mạnh đến 2 ưu điểm này cùng các rủi ro khi dùng NGEN.

    Tuy nhiên đến hiện tại mình cũng chưa thể chạy 1 package đã Ngen mà giảm được bộ nhớ/hay workingset cả???

    Không hiểu sao hắn ra cùng bộ .net 2 mà đến giờ nguồn tài liệu vẫn rất hiếm hoi và chưa thấy có công ty lớn/tổ chức nào nói rằng họ đã triển khai rất thành công với Ngen cả. Chê thì nhiều. Vậy nên bây giờ có hơi bối rối với giải pháp này, nhưng quyết ko bỏ cuộc.

    Biết admin rất giỏi về mảng C/C++ lập trình hệ thống nên mình xin phép 2 câu hỏi sau:
    - Những gì được nạp vào bộ nhớ khi 1 dụng được khởi tạo? Nạp vào đâu? (chắc cũng tương tự cho 1 ứng dụng .Net)
    - Các khái niệm về bộ nhớ như: workingset, private bytes, virtual memory size,..(các thông số này sử dụng trên TaskManager, ProcessExplorer, VmMap). Mình có tìm hiểu rồi nhưng mù mờ lắm. Chắc cần phải được hỗ trợ thêm :d

    Sẵn đây mình cũng hỏi lại lần nữa xem bạn nào đã từng làm Ngen thì chia sẻ kinh nghiệm với
    Thanks all

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Ngen đâu cần triển khai gì, cứ cài vào là nó tự làm việc thôi! Mình không rõ mục đích của bạn khi nghiên cứu Ngen với chi phí thời gian tốn kém như vậy.

    Bạn nên đọc tài liệu về cơ chế làm việc của các chương trình sử dụng IL sau đó móc nối với những tính năng mà Ngen đưa ra bạn sẽ hình dung ra được tác dụng của Ngen.

    Các câu hỏi của bạn, bạn có thể dễ dàng tìm được câu trả lời trong tài liệu về hệ điều hành được nhiều bạn gửi lên cộng đồng C Việt. Ngoài ra, MSDN cũng miêu tả rất kỹ về những gì bạn hỏi nên Kevin không trả lời bạn trực tiếp ở đây.

    PS: Bạn không nên hỏi đích danh, cũng như việc sử dụng từ 'pro' trong bài viết. Khi bạn hỏi đích danh ai đó, người khác sẽ ngại giúp đỡ bạn. Khi bạn sử dụng từ 'pro' thì những người có khả năng sẽ tránh né giúp đỡ, tránh né trao đổi với bạn.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Ok, ghi nhận. Mình sẽ cẩn thận hơn trong các câu chữ.
    Riêng việc mình hỏi, cơ chế và tác dụng của Ngen thực sự đã nắm được rồi.
    Vấn đề là mình đã thử sử dụng tool Ngen để generate native code, tuy nhiên tác dụng lại đi ngược lại với các ưu điểm đã được đề cập là:
    - Tăng tốc độ khởi động
    - Giảm vùng nhớ working-set
    Hiện tại thì app chạy chậm hơn và vùng nhớ sử dụng lại tăng lên (thậm chí gấp đôi).
    Qua tìm hiểu thì nguyên nhân là do clr load cả code il và native (ni) vào memory, và bộ clrjit phải làm việc lại từ đầu cho các assembly đã được Ngen-ed vì vậy tốn kém cả private byte và working set.
    ...
    Có thể còn có các nguyên nhân khác nữa.
    Nhưng hiện tại không biết khắc phục thế nào để đạt được những lợi ích mà Ngen đem lại? Và hơn hết làm thế nào để có thể tạo được các package mà chạy trên các môi trường khác nhau???

    Vậy ai đã từng làm Ngen thì chia sẻ cho mình kinh nghiệm với.

    PS: app này chạy trên citrix box, nên việc hạn chế tài nguyên là cực kỳ quan trọng nên bọn mình đang rất kỳ vọng vào bộ tool Ngen này.
    Mong được giúp đỡ.

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

    Mặc định Native Image Generator(Ngen) cơ chế và cách triển khai để tiết kiệm bộ nhớ?

    các anh pro quá không biết bao h mình mới dc ntnay :((

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

  1. Phỏng vấn tiếng Nhật tại công ty Image Partner
    Gửi bởi quyenpv00958 trong diễn đàn Kinh nghiệm CNTT
    Trả lời: 2
    Bài viết cuối: 26-06-2012, 10:20 PM
  2. Lỗi "Unable to load the native components of SQL Server Compact ..." khi khai báo sqlCeConnection
    Gửi bởi mrgatay trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 01-06-2012, 10:25 AM
  3. LUA Script Generator 1.0
    Gửi bởi haian trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-03-2010, 04:36 PM
  4. cơ chế tự tổng hợp và phân rã của virus image.exe
    Gửi bởi haian trong diễn đàn Lập trình Virus & Anti-Virus
    Trả lời: 6
    Bài viết cuối: 05-11-2008, 10:12 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