Tối ưu truy vấn dữ liệu với LINQ
C# Code
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
public class LinqOptimization : MonoBehaviour
{
public List<Enemy> allEnemies = new List<Enemy>();
// Cạm bẫy: Dùng LINQ trong hàm Update()
// Mỗi frame, nó sẽ tạo ra rác (garbage) và thực hiện duyệt toàn bộ danh sách.
void Update_Bad()
{
// KHÔNG NÊN LÀM VẬY!
var visibleEnemies = allEnemies.Where(e => e.IsVisible()).ToList();
foreach (var enemy in visibleEnemies)
{
// ...
}
}
// Cách tối ưu hơn: Dùng vòng lặp for/foreach truyền thống
void Update_Good()
{
foreach (var enemy in allEnemies)
{
if (enemy.IsVisible())
{
// ...
}
}
}
// Khi nào nên dùng LINQ? -> Khi thực hiện các tác vụ một lần, không lặp lại mỗi frame.
void FindStrongestEnemyOnce()
{
// Ví dụ: Tìm kẻ địch mạnh nhất khi bắt đầu màn chơi
var strongestEnemy = allEnemies.OrderByDescending(e => e.powerLevel).FirstOrDefault();
if (strongestEnemy != null)
{
Debug.Log("Kẻ địch mạnh nhất là: " + strongestEnemy.name);
}
}
}
public class Enemy {
public string name;
public int powerLevel;
public bool IsVisible() { return true; /* Logic kiểm tra hiển thị */ }
}LINQ rất mạnh mẽ nhưng có thể gây tốn hiệu năng nếu không sử dụng cẩn thận. Snippet này chỉ ra các mẹo và cạm bẫy khi dùng LINQ trong game.