2012-10-27 25 views
11

Hạn ngạch sử dụng CPU cho Tác vụ nền trong WinRT là 1 giây hoặc 2 giây nếu chúng ở trên màn hình khóa. Câu hỏi đặt ra là làm cách nào để đo chính xác mức sử dụng CPU này - tôi muốn biết liệu mã của tôi có chạy dưới hạn ngạch 2 giây này hay không? Tôi đoán chỉ sử dụng DateTime.Now trước và sau khi thực hiện nhiệm vụ không phải là cách tiếp cận đúng.
Bài viết MSDN về Nhiệm vụ Bối cảnh:
Supporting your app with background tasksLàm thế nào để đo lường chính xác việc sử dụng CPU trong các tác vụ nền?

+0

Tôi cũng đoán rằng i5 có thể chạy nhiều mã hơn bộ xử lý dựa trên ARM ... Tôi có cần bộ xử lý chậm nhất có thể thử nghiệm nếu ứng dụng của tôi không mất hơn 2 giây không? – GameScripting

+0

Điểm tốt, nếu đúng, chúng ta có ít năng lực tính toán hơn cho công việc nền của chúng tôi trên máy tính bảng ARM cấp thấp hơn so với các máy tính để bàn có lõi của Core-i7. –

+0

Nhân viên web có giống nhiệm vụ nền không? Tôi muốn tìm nạp và lưu trữ hình ảnh, nhưng 2 giây dường như không đủ thời gian xử lý (đặc biệt là vì tôi muốn cắt và lưu chúng). – kamranicus

Trả lời

0

tôi đã cùng một vấn đề.

Nếu bạn bắt đầu Task Manager, dưới tab App history, bạn có thể xem số liệu thống kê về mức sử dụng tài nguyên của các ứng dụng khác nhau. Một trong số đó là CPU Time. Vấn đề là nó không phải là trung bình, nhưng nó chỉ hiển thị tổng thời gian sử dụng CPU.

Nếu bạn cần thời gian trung bình, mẹo là giữ số trong ứng dụng của bạn cho bất kỳ hoạt động nền nào và chia toàn bộ thời gian cho điều đó, vì vậy bạn sẽ nhận được thời gian trung bình.

+0

Tôi đoán đây là cách tốt nhất mà chúng tôi có thể thực hiện ngay bây giờ để đo mức sử dụng CPU, cảm ơn. –

0

Tôi đã sử dụng GetProcessTimes WinAPI.

Các tài liệu cho biết “máy tính để bàn chỉ ứng dụng”, nhưng về mặt kỹ thuật, nó hiện diện ngay cả trên điện thoại:

[DllImport("KERNELBASE.DLL", SetLastError = true)] 
    static extern IntPtr GetCurrentProcess(); 

    // NB! Undocumented API, won't pass marketplace checks. 
    [DllImport("KERNELBASE.DLL", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool GetProcessTimes(IntPtr hProcess, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime); 

Trên PC thay thế KERNELBASE.DLL với Kernel32.dll.

Điều đó sẽ không vượt qua chứng nhận thị trường, nhưng sẽ là đủ để bạn chuẩn cho tác vụ nền của mình.

Gọi GetProcessTimes khi bắt đầu, tính long startTime = KernelTime + UserTime. Gọi GetProcessTimes khi hoàn tất, tính (KernelTime + UserTime) - startTime và bạn nhận dữ liệu của mình. Đơn vị đo lường là 100ns ve, giống như trong TimeSpan.

Các vấn đề liên quan