Nối tiếp phần 1, mình vẫn tiếp tục trình làng về đều công cụ 1-1 giản, bá đạo mà lại truờng không thể dạy, làm đồ án cũng không lúc nào dùng. Mặc dù nhiên, chúng lại đuợc áp dụng trong 96.69% dự án thực tế.

Bạn đang xem: Giám sát cơ sở dữ liệu với sql profiler là gì

Thông qua những câu chuyện ngắn gọn, bản thân sẽ ra mắt và giải thích về những công vắt này nhé. Bọn chúng lần lượt là:

Phần 1: Unit thử nghiệm và LoggingPhần 2: Profiler và Command Line

Nhắc lại một tí, hai nhân vật chính trong mẩu chuyện này là:

Tùng, một sinh viên Ép Tao Dê mới ra trường, bắt đầu làm công ty phần mềm Ép Dê Tao với vị trí junior.Sơn, một anh senior dev kì cựu cao to lớn sáu múi.

Continue reading Công cụ solo giản, bá đạo mà lại 69.96% sv IT đắn đo – Phần 2 : Profiler và Command Line →


c#cmdcodecommand linejunior developermemory leakoptimizeoptimize codeprofilerprogrammingsenior developerubuntu
*

*
Kênh Youtube share về ngành lập trình bên dưới dạng vlog 3-4 phút hết sức ngắn gọn gàng và bửa ích.Các chúng ta nhớ ghé thăm với subscribe nha!

*
bảo mật nhập môn - bảo mật cơ phiên bản cho developer

*
Nhập môn lập trình ko code

*
Code dạo cam kết sự - thiết kế viên đâu chỉ chỉ biết code


*

Mọi bài toán chia sẻ, trích dẫn từ bài viết của blog đều đề nghị tuân theo các quy định sau:Trích dẫn rõ nguồn
Không áp dụng vào mục tiêu thương mại
*

*

*

Tối ưu hóa nút tiêu thụ bộ nhớ ứng dụng Android của doanh nghiệp với Profiler trong app android Studio

App Profiling là gì và nó có thể giúp gì?

Một câu hỏi mà những nhà cải cách và phát triển ứng dụng buộc phải tự hỏi bản thân là: Tôi sẽ làm gì khi người dùng giao tiếp mà họ cảm xúc bị lag khi áp dụng một áp dụng nhất định? Câu trả lời là luôn luôn rõ ràng, nhưng số đông thời gian nó đề xuất làm là những tác vụ nặng về CPU ngăn luồng chính và cũng đều có trường hợp các loại vấn đề về hiệu năng này có liên quan liêu đến bộ nhớ.

Tất nhiên, chúng ta cũng có thể in một vài log sẽ giúp bạn hạn chế và khắc phục sự số, nhưng bạn cần phải khá rất gần gũi với codebase để đặt log vào chỗ thích hợp

Nếu bạn muốn khám phá một tùy lựa chọn khác ko chỉ dựa vào log, hãy xem apk Profiler, được reviews trong apk Studio 3.0. Các nhà phạt triển rất có thể sử dụng pháp luật này để đo lường việc thực hiện CPU và thực hiện bộ nhớ, chặn những phản ứng mạng và thậm chí còn quan ngay cạnh mức tiêu thụ năng lượng.

Dựa trên dữ liệu số liệu do apk Profiler cung cấp, chung tôi có thể hiểu rõ hơn về cách các áp dụng của tôi sử dụng CPU và những tài nguyên bộ nhớ lưu trữ khác. Đây là nơi rất có thể dẫn bọn họ đến nguyên nhân gốc rễ của vấn đề.

Trong bài viết này, tôi sẽ trao đổi về các phương thức để xử lý các vấn đề liên quan đến hiệu suất một cách gồm hệ thống bằng phương pháp sử dụng android Profiler.

Các vụ việc về bộ nhớ

Hãy cùng xem lại cai quản lý bộ lưu trữ Android để chúng ta có thể hiểu tại sao việc sử dụng bộ lưu trữ không phù hợp có thể góp phần gây ra những vấn đề về hiệu suất. Một áp dụng Android, như thể như ngẫu nhiên ứng dụng phần mềm khác, chạy trong môi trường thiên nhiên bị số lượng giới hạn bộ nhớ, trong các số đó HĐH android chỉ định một trong những phần giới hạn tuy nhiên linh hoạt của đống bộ nhớ lưu trữ cho mỗi ứng dụng được khởi chạy.

Trong trong cả vòng đời của một ứng dụng, HĐH apk phân bổ bộ nhớ lưu trữ cho vận dụng để giữ trữ những hướng dẫn và tài liệu chương trình. Lượng bộ nhớ cần thiết khác trong số trường hợp áp dụng ứng dụng khác nhau. Chẳng hạn, một áp dụng cần nhiều bộ nhớ hơn nhằm hiển thị ảnh bitmap toàn màn hình hiển thị so cùng với văn bản toàn màn hình.

Khi không còn cần cỗ nhớ, HĐH android sẽ tự động lấy lại tài nguyên bộ nhớ này để rất có thể sử dụng lại để ship hàng yêu cầu cấp phát bộ lưu trữ mới. Quá trình này thường xuyên được call là Garbage Collection.

Garbage Collection không tác động đến công suất của ứng dụng, vì thời gian tạm giới hạn ứng dụng tạo ra bởi một quá trình thu gom rác là không đáng để. Tuy nhiên, ví như có quá nhiều sự khiếu nại Garbage Collection xẩy ra trong một khoảng thời gian ngắn, người tiêu dùng sẽ bắt đầu có trải nghiệm lờ đờ trong ứng dụng.

Cấu hình bộ nhớ lưu trữ với app android Profilter

Các điều hiện tại tiên quyết của app android Profile là bản sao của apk Studio 3.0 trở lên cùng thiết bị nghiên cứu hoặc trình mang lập được liên kết chạy android SDK 26 trở lên. Khi bạn đã có những phần ban sơ này, hãy nhấp vào tab Profiler ngơi nghỉ bảng dưới cùng để khởi chạy apk Profiler.

*

Chạy ứng dụng của khách hàng ở chính sách Debug và bạn sẽ thấy android Profiler hiển thị các số liệu real-time cho CPU, Memory, Network và Energy.

*

Nhấp vào Memory giúp thấy số liệu sử dụng bộ lưu trữ chi tiết, app android Profiler hỗ trợ một ánh nhìn tổng quan liêu trực quan về câu hỏi sử dụng bộ lưu trữ theo thời gian.

*

Như chúng ta cũng có thể thấy vào sơ vật trên, bao gồm một sự tăng bất chợt biến thuở đầu khi vận dụng được khởi chạy lần thứ nhất tiên, sau đó là một giọt và sau cuối là một mặt đường thẳng. Đây là một hành vi điển hình nổi bật của một ứng ụng Hello World 1-1 giản, vì có rất nhiều điều đang diễn ra tại đây.

Biểu đồ bộ lưu trữ phẳng tức là sử dụng bộ lưu trữ ổn định và nó là tình huống bộ lưu trữ lý tưởng mà họ muốn đạt được. Đọc biểu đồ bộ nhớ lưu trữ cũng y như phân tích biểu đồ kinh doanh chứng khoán nhưng vắt vào đó họ phải phân tích chi tiết hơn.

Xem thêm: Hướng Dẫn Cách Đàn Điệu Bolero Trên Đàn Guitar, Hướng Dẫn Học Đàn Guitar Bolero Dễ Dàng

Android Profiler sẽ hoạt động

Hãy cùng xem một vài chủng loại biểu thứ báo hiệu các vấn đề về cỗ nhớ. Bạn cũng có thể sử dụng mã trường đoản cú repo Github này nhằm tái tạo các vấn đề này.

1. Một đồ vật thị sẽ phát triển

Nếu nhiều người đang quan giáp một đường xu thế chỉ liên tiếp tăng với hiểm khi đi xuống, đó hoàn toàn có thể là vì chưng một memory leak, tức là một số phần của bộ nhớ lưu trữ không thể được giải phóng. Hoặc chỉ đơn giản và dễ dàng là ko đủ bộ nhớ lưu trữ để ứng phó với ứng dụng. Khi áp dụng đạt mang đến giới giạn bộ lưu trữ và HDDH app android không thể phân bổ thêm bộ lưu trữ cho ứng dụng, Out
OfMemory
Error sẽ ảnh hưởng ném.

*
Vấn đề này hoàn toàn có thể được tái hiện trong ví dụ High Memory Usage từ vận dụng demo. Ví dụ như này về cơ phiên bản tạo ra một trong những lượng lớn các hàng (100k) với thêm các hàng này vào Linear
Layout.

/*** * In order to áp lực the memory usage, * this activity creates 100000 rows of Text
View when user clicks on the start button */class High
Memory
Usage
Activity : App
Compat
Activity() val NO_OF_TEXTVIEWS_ADDED = 100000 override fun on
Create(saved
Instance
State: Bundle?) super.on
Create(saved
Instance
State) set
Content
View(R.layout.activity_high_memory_usage) support
Action
Bar?.set
Display
Home
AsUp
Enabled(true) support
Action
Bar?.set
Title(R.string.activity_name_high_memory_usage) btn_start.set
OnClick
Listener add
Rows
OfText
View() override fun on
Support
Navigate
Up(): Boolean on
Back
Pressed() return true /** * địa chỉ cửa hàng rows of text views to the root Linear
Layout */ private fun add
Rows
OfText
View() val linear
Layout = find
View
ById(R.id.linear_layout) val text
View
Params = Linear
Layout.Layout
Params( Linear
Layout.Layout
Params.MATCH_PARENT, Linear
Layout.Layout
Params.WRAP_CONTENT ) val text
Views = array
OfNulls(NO_OF_TEXTVIEWS_ADDED) for (i in 0 until NO_OF_TEXTVIEWS_ADDED) text
Views = Text
View(this) text
Views?.layout
Params = text
View
Params text
Views?.text = i.to
String() text
Views?.set
Background
Color(get
Random
Color()) linear
Layout.add
View(text
Views) linear
Layout.invalidate() /** * Creates a random color for background màu sắc of the text view. */ private fun get
Random
Color(): Int val r = Random() val red = r.next
Int(255) val green = r.next
Int(255) val blue = r.next
Int(255) return Color.rgb(red, green, blue) Activity này không sử dụng bất kỳ Adapter
View hoặc Recycler
View nhằm tái chế những item views, do đó, cần phải có 100 nghìn views để kết thúc việc triển khai add
Rows
OfText
View()

Bây giờ, nhấp vào nút bắt đầu và theo dỗi vấn đề sử dụng bộ nhớ trong app android Studio. Việc sử dụng bộ lưu trữ tiếp tục tăng và sau cùng ứng dụng crashes. Đây là hành động được hy vọng đợi.

Giải pháp để khắc phục sự việc này rất solo giản. Chỉ cần áp dụng Recycler
View sử dụng lại những item views cùng cúng ta rất có thể giảm đáng để số lần tạo view. Sơ đồ dưới là mức sử dụng bộ lưu trữ để trình bày cùng cùng với 100k thắng lợi views. Và chúng ta cũng có thể thấy sự cải thiện trong ví dụ Low Memory Usage With Recycler
View

*

2. Sự nhiễu loàn trong một khoảng thời hạn ngắn

Sự nhiễu loạn là 1 trong những chỉ số về sự tạm bợ và điều đó cũng vận dụng cho việc sử dụng bộ lưu trữ Android. Khi chúng ta quan gần kề loại mô hình này, thường có nhiều object được tạo ra và ném đi trong tầm đời ngắn ngủi của chúng.

CPU sẽ lãng phí không hề ít chu kỳ vào việc thực hiện thu gom rác, mà lại không thực hiện công việc thực tế cho ứng dụng. Người dúng có thể gặp mặt phải giao diện người dùng lờ đờ và họ chắc chắn đề nghị tối ưu hóa câu hỏi sử dụng bộ lưu trữ trong trường đúng theo này.

*
Để tái tạo vấn đề này, hãy chạy lấy ví dụ như Numerous GCs từ ứng dụng demo. Ví dụ này áp dụng Recycler
View để hiển thị nhì hình hình ảnh bitmap cố thế: Một hình ảnh bitmap to có độ sắc nét 1000x1000 và nhỏ dại hơn 256x256. Scroll Recycler
View và các bạn sẽ thấy nhiễu loạn ví dụ trong Memory Profiler và trải nghiệm bạn dùng chậm trễ trong áp dụng di động.
*
https://gameviethot.com/profiler-la-gi/imager_16_2_700.jpg

class Numerous
GCActivity: App
Compat
Activity() val NO_OF_VIEWS = 100000 override fun on
Create(saved
Instance
State: Bundle?) super.on
Create(saved
Instance
State) set
Content
View(R.layout.activity_numerous_gc) btn_start.set
OnClick
Listener setup
Recycler
View() private fun setup
Recycler
View() val numbers = array
OfNulls(NO_OF_VIEWS).map
Indexed index, _ -> index recycler
View.layout
Manager = Linear
Layout
Manager(this) recycler
View.adapter = Numerous
GCRecycler
View
Adapter(numbers) class Numerous
GCRecycler
View
Adapter(private val numbers: List): Recycler
View.Adapter() override fun on
Create
View
Holder(parent: View
Group, view
Type: Int): Numerous
GCView
Holder val view = Layout
Inflater.from(parent.context) .inflate(R.layout.item_numerous_gc, parent, false) return Numerous
GCView
Holder(view) override fun get
Item
Count(): Int return numbers.size override fun on
Bind
View
Holder(vh: Numerous
GCView
Holder, position: Int) vh.text
View.text = position.to
String() //Create bitmap from resource val bitmap = if(position % 2 == 0) Bitmap
Factory.decode
Resource(vh.image
View.context.resources, R.drawable.big_bitmap) else Bitmap
Factory.decode
Resource(vh.image
View.context.resources, R.drawable.small_bitmap) vh.image
View.set
Image
Bitmap(bitmap) class Numerous
GCView
Holder(item
View: View) : Recycler
View.View
Holder(item
View) var text
View: Text
View = item
View.find
View
ById(R.id.text_view) var image
View: Image
View = item
View.find
View
ById(R.id.image_view)Trong trường hợp này, code ví dụ đang sử dụng thực hiện Recycler
View ham mê hợp, nhưng chúng ta vẫn chạm mặt phải những vấn đề về bộ nhớ. Tuy vậy Recycler
View là chiến thuật cho vấn đề bộ nhớ trước đó, đó là một viên đạn bạc xử lý tất cả những vấn đề về bộ nhớ. Để search ra nguyên nhân gốc rễ, chúng ta cần thêm thông tin để phân tích.

Nhấp loài chuột vào nút Recort trong Menory Profiler, scroll Recycler
View một lúc với nhấp vào nút stop. Profiler đang hiển thị cho bạn một danh sách sử dụng bộ lưu trữ chi máu được phân loại theo kiểu đối tượng.

*
Sắp xếp danh sách theo kích cỡ Shallow cùng mục trên thuộc là mảng byte, vì vậy chúng buổi tối biết rằng phần nhiều các phân bổ bộ nhớ được quy cho những mảng byte được tạo. Chỉ gồm 32 allcations đến mảng byte cùng tổng kích thước của nó là 577.871.888 bit là 72,23MB

Để xem thêm thông tin, nhấp vào trong 1 trong các instances trong cơ chế xem à xem ngăn xếp cuộc gọi phân bổ. Method được highlight là on
Bind
View
Holder() của Numerous
GCRecycler
View
Adapter, nhưng bình thường tôi không tạo ra bất kf mảng byte nào cụ thể với method này.

Hãy quan sát xa rộng method on
Bind
View
Holder() trong hotline stack. Những cuộc gọi method từ decode
Resource() -> decode
Resource
Stream() -> decode
Stream() -> native
Decode
Asset()và sau cuối đến new
Non
Movable
Array(). Tài liệu của method này nói Trả về một mảng được phân bổ trong một khu vực của vùng Java heap vị trí nó sẽ không lúc nào được di chuyển. Điều này được áp dụng để thực hiện phân chia riêng bên trên Java Heap, chẳng hạn như Direct
Byte
Bufffers với Bitmap

Tuy nhiên, chúng ta cũng có thể kết luận rằng tương đối nhiều mảng byte được chế tác ngay tại đây bằng cách sử dụng cách thức native
Decode
Asset().

Mỗi lần họ gọi Bitmap
Factory.decode
Resource(), một instance của đối tượng bitmap được tạo. Nếu phổ biến ta rất có thể giảm tần suất của những lệnh Bitmap
Factory.decode
Resource(), chúng ta có thể tránh sự cần thiết phải phân bổ bộ lưu trữ và cho nên làm bớt sự lộ diện của Garbage Collection.

class Less
Numerous
GCRecycler
View
Adapter(private val context: Context, private val numbers: List): Recycler
View.Adapter() val bit
Bitmap = Bitmap
Factory.decode
Resource(context.resources, R.drawable.big_bitmap) val small
Bitmap = Bitmap
Factory.decode
Resource(context.resources, R.drawable.small_bitmap) override fun on
Create
View
Holder(parent: View
Group, view
Type: Int): Numerous
GCView
Holder val view = Layout
Inflater.from(parent.context) .inflate(R.layout.item_numerous_gc, parent, false) return Numerous
GCView
Holder(view) override fun get
Item
Count(): Int return numbers.size override fun on
Bind
View
Holder(vh: Numerous
GCView
Holder, position: Int) vh.text
View.text = position.to
String() //Reuse bitmap val bitmap = if(position % 2 == 0) bit
Bitmap else small
Bitmap vh.image
View.set
Image
Bitmap(bitmap) Đây là phiên phiên bản cải tiến của Recycler
View
Adapter chỉ tạo các bitmap một lần, tàng trữ chúng và áp dụng lại các bipmap này đến Image
View trong cách làm on
Bind
View
Holder(). Bất kỳ phân bổ bộ lưu trữ không quan trọng khác được kị khỏi. Hãy cùng xem lại biểu đồ sau thời điểm cải tiến:

*
Chúng ta thấy một biểu đồ gia dụng sử dụng bộ nhớ phẳng cùng ở đó chỉ có một phần bổ cho một mảng byte và size của nó là không đáng kể. Ngoại trừ ra, ứng dụng lúc này có thể cuộn mượn mà lại không có ngẫu nhiên chậm chạp nào.
*

Tóm lược

Tôi hi vọng bài này đã cho bạn dạng ý tưởng về kiểu cách sử dụng công cụ định hình về phân tích sự việc hiệu suất. Luôn chăm chú đến việc sử dụng bộ nhớ lưu trữ trong ứng dụng của khách hàng và trách phân chia tài nguyên bộ nhớ không đề nghị thiết. Chỉ việc nhớ, mục tiêu là khiến cho biểu vật sử dụng bộ nhớ lưu trữ của bạn càng phẳng càng tốt.