- vừa được xem lúc

C#: Tối ưu code với kiểu truyền tham chiếu "ref" và "out" (Phần 1)

0 0 5

Người đăng: Mello

Theo Viblo Asia

I. Bài toán đặt ra

Trong công ty, có một bạn nhân viên có nickname là “Hoang Long” nhưng một ngày bạn muốn thay đổi nickname thành “Hoang Long đẹp trai”. Yêu cầu viết 1 function để thực hiện.

Cùng so sánh tốc độ thực thi và cách tối ưu bộ nhớ khi giải quyết bài toán này theo 2 cách: truyền parameter bình thường và dùng parameter tham chiếu

II. Dẫn nhập

1. Ôn lại về bộ nhớ head và stack !

Giống

  • Cả 2 đều là bộ nhớ được tạo ra trên RAM khi chương trình thực thi

Khác

Điểm so sánh Stack Head
Lưu trữ biến Biến cục bộ, tham chiếu truyền vào Biến con trỏ được cấp phát động (với C# thì là từ khóa new)
Quản lý bởi Hệ điều hành Lập trình viên
Tốc độ truy cập Rất nhanh Bình thường
Kích thước Cố định (tùy vào hệ điều hành) Có thể tang giảm linh động, tùy vào nhu cầu sử dụng

2. Cách lưu trữ khi truyền Parameter bình thường

VD:

Trong ví dụ trên, “Hoang Long” được truyền vào khi thực hiện function ChangeName sẽ được copy giá trị vào bộ nhớ stack, thực hiện xong gán giá trị ngược lại cho biến newName

Vậy phải có 2 bước:

  • Sao chép giá trị vào 1 biến tạm
  • Gán ngược lại giá trị cho 1 biến mới Vì vậy chúng ta thực hiện trên cùng ô nhớ của string name thì tốc độ xử lý sẽ nhanh hơn, vậy làm sao để thực hiện?

III. ref và out

Chúng ta có thể them từ khóa ref và out khi khai báo và gọi hàm để chỉ cho máy biết sẽ lấy chính ô nhớ của biến để thực thi:

Với "ref":

Với "out":

Như ví dụ, chúng ta không cần phải gán ngược lại giá trị cho 1 biến nào, mà biến được truyền đã thay đổi giá trị khi thực hiện xong hàm.

→ Do đó, tốc độ xử lý sẽ nhanh hơn do máy không phải thực hiện 2 bước (2) là copy ra biến tạm và gán ngược lại giá trị.

Với DataTable hoặc các data type có dữ liệu lớn thì ra cũng có thể:

Phần sau mình sẽ giới thiệu cách dung ref và out, ngoài ra các bạn có thể tham khảo qua các nguồn mà mình dùng trong bài chia sẻ này:

Sự khác nhau giữa bộ nhớ Heap và bộ nhớ Stack trong lập trình: https://viblo.asia/p/su-khac-nhau-giua-bo-nho-heap-va-bo-nho-stack-trong-lap-trinh-E375zQb1lGW

Truyền tham chiếu với ref và out trong C#: https://viblo.asia/p/truyen-tham-chieu-voi-ref-va-out-trong-c-m68Z0QwMlkG

Từ khóa ref và out trong C#: https://howkteam.vn/Course/C-Basics/Tu-khoa-ref-va-out-trong-C

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các loại tham chiếu Nullable trong C# (Phần 1)

1. Giới thiệu. C# 8.0 giới thiệu kiểu tham chiếu nullable và kiểu tham chiếu non-nullable cho phép bạn đưa ra các lựa chọn quan trọng về thuộc tính cho các biến kiểu tham chiếu:.

0 0 36

- vừa được xem lúc

Command pattern qua ví dụ !

Command pattern là gì . Command pattern khá phổ biến trong C #, đặc biệt khi chúng ta muốn trì hoãn hoặc xếp hàng đợi việc thực hiện một yêu cầu hoặc khi chúng ta muốn theo dõi các hoạt động. Hơn nữa, chúng ta có thể hoàn tác tác chúng. .

0 0 178

- vừa được xem lúc

Hiểu Liskov Substitution Principle qua ví dụ !

Liskov Substitution Principle là gì . Nguyên tắc đóng mở xác đinh rằng các instance của lớp con có thể thay thế được instance lớp cha mà vẫn đảm bảo tính đúng đắn của chương trình.

0 0 24

- vừa được xem lúc

Creating custom Controls Wpf

Introduction. Wpf/winforms provides various controls like Buttons, Textbox, TextBlock, Labels etc.

0 0 41

- vừa được xem lúc

[P1] Chọn công nghệ nào để xây dựng website?

Hiện nay nhu cầu phát triển website, app tăng rất cao do xu hướng "số hóa 4.0" trong và ngoài nước.

0 0 71

- vừa được xem lúc

Kiểu dữ liệu trong C#

Dẫn nhập. Ở bài BIẾN TRONG C# chúng ta đã tìm hiểu về biến và có một thành phần không thể thiếu khi khai báo biến – Đó là kiểu dữ liệu.

0 0 24