Thuộc tính Environment.ProcessorCount trả về số lượng **lõi xử lý logic (logical processors)** trên máy tính hiện tại. Giá trị này bao gồm cả hyper-threading (ví dụ: 4 cores + hyperthreading = 8 logical processors).
Ví dụ cơ bản
int cores = Environment.ProcessorCount;
Console.WriteLine($"Số lõi logic: {cores}");
Mã nguồn hoàn chỉnh
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Environment.ProcessorCount);
}
}
}
Kết quả (ví dụ)
8
Ứng dụng thực tế
| Mục đích | Code |
|---|---|
| Giới hạn độ song song (MaxDegreeOfParallelism) | Parallel.ForEach(items, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, ...) |
| Cấu hình ThreadPool | ThreadPool.SetMinThreads(Environment.ProcessorCount, ...) |
| Chia tác vụ cho worker | int batchSize = items.Count / Environment.ProcessorCount; |
| Benchmark/Performance test | Điều chỉnh workload theo số core |
Lưu ý
- Trả về **logical processors** (bao gồm hyper-threading), không phải physical cores.
- Trên container (Docker/K8s), có thể phản ánh CPU limit của container chứ không phải host.
- Để lấy physical cores: cần P/Invoke Windows API (
GetLogicalProcessorInformation) hoặc đọc/proc/cpuinfotrên Linux. - Giá trị không thay đổi trong suốt vòng đời process.
.NET 8+: Environment.ProcessorCount vs GCHeapCount
// .NET 8 thêm GCHeapCount cho server GC
int gcHeaps = Environment.GCHeapCount; // Thường = ProcessorCount cho Server GC