Công cụ tìm lỗi memory leaks và tối ưu memory

Giới thiệu

Ngày này với sự phát triển mạnh mẽ của các thiết bị lưu trữ thì các lập trình viên chúng ta thường không mấy phải quan tâm đến vấn đề tối ưu hay quản lí bộ nhớ hiệu quả. Và một khi vấn đề về bộ nhớ xảy ra thì khó mà có thể tìm ra nguyên nhân. Ở bài viết này mình xin giới thiệu 1 công cụ giúp cho việc tìm lỗi memory rất hay dành cho các .NET developers. Đó chính là ANTS Memory Profiler.

Nếu bạn phải cố gắng tìm ra vấn đề về memory ở không có công cụ hỗ trợ có thể tốn vài ngày, thì với ANTS Memory Profiler, chỉ cần vài phút bạn sẽ dễ dàng tìm thấy nơi vấn đề phát sinh, giúp giải quyết vấn đề nhanh nhất và hiệu quả nhất. Riêng mình thì cũng đã gặp phải tình trạng memory tăng lên quá cao khi migration data, và nhớ có công cụ này thì mình đã tìm ra được nguyên nhân và từ đó tối ưu được bộ nhớ và performance.

Tính năng

Giao diện chính của chương trình

Nhìn qua thì mình thấy giao diện khá đơn giản và dễ sử dụng, bao gồm rất nhiều các ứng dụng của C# như Windows Form, ASP.NET, .NET CORE, Window Service,... thật tuyệt 😄

Điểm qua tính năng

  • Giúp tìm ra memory leaks trong thời gian ngắn nhất
  • Tối ưu bộ nhớ sử dụng trong code C# và VB.NET
  • Hiện thị bộ nhớ được sử dụng (managed va unmanaged memory) +Managed memory là những vùng nhớ mà được Garbage Collector của C# quản lý , và khi nó không cần thiết nữa thì GC sẽ tự động xóa đi để tối ưu bộ nhớ. +Unmanaged memory là những vùng nhớ mà GC không quản lý được như Files, Streams, Db Connections,.. những vùng nhớ này chúng ta phải tự giải phóng khi dùng xong, nếu không có thể gây ra memory leaks hoặc là locked resources.
  • Giúp tối ưu performing, tài nguyên sử dụng.

Tính năng hữu ích

  • ANTS giúp chúng ta nhìn thấy mối quan hệ giữa các objects. Retention Graph vẽ ra cho chúng ta nhanh chóng các object đang được hold bởi memory, hiện thị mỗi quan hệ cho đến khi object được GC (Garbage collector của C#) dọn dẹp.

  • ANTS cho chúng ta thấy những objects sử dụng những bộ nhớ nào và phần nào đang chiếm dụng tài nguyên.

  • Tính năng này cực kĩ hữu ích khi bị memory leaks và bạn muốn nhanh chóng tìm ra nơi gây ra lỗi đó. Nhờ có tính năng này mà mình đã tìm ra lỗi gây tràn bộ nhớ bởi XmlSerializer. (đây là 1 lỗi mà ANTS có list ra ở trang chủ của tool này luôn, các bạn có thể xem thêm ở [đây])(https://documentation.red-gate.com/amp8/strategies-for-memory-profiling/checking-unmanaged-memory-usage/finding-a-dynamically-generated-assembly-leak)

Tóm gọn

ANTS Memory Profiler với những tính năng có 1 0 2 vậy nên nó thực sự là hữu ích khi chúng ta gặp vấn đề về memory, phần mềm này cho phép sử dụng bản Trial trong vòng 14 ngày, còn giá để sử dụng thì khá là cao $619, nên có thể bạn nên thử. Nếu để debug các câu lệnh SQL do EntityFramework sinh ra ta có SQL Profiler, thì debug memory có lẽ ANTS Memory Profiler là sự lựa chọn số 1. Cảm ơn các bạn đã đọc bài.

Bài viết có tham khảo tại: https://www.red-gate.com/products/dotnet-development/ants-memory-profiler/index https://documentation.red-gate.com/amp8/strategies-for-memory-profiling/checking-unmanaged-memory-usage/finding-a-dynamically-generated-assembly-leak