Tôi đã tạo một điều khiển WPF (kế thừa từ FrameworkElement) hiển thị một đồ họa lát gạch có thể được quét. Mỗi ô là 256x256 pixel ở 24bpp. Tôi đã ghi đè OnRender. Ở đó, tôi tải bất kỳ lát mới (như BitmapFrame), sau đó vẽ tất cả các gạch có thể nhìn thấy bằng cách sử dụng drawingContext.DrawImage.WPF hiển thị hiệu suất với BitmapSource
Bây giờ, bất cứ khi nào có nhiều hơn một ô xếp mới cho mỗi chu kỳ hiển thị, tốc độ khung hình giảm từ 60 khung hình xuống 0 trong khoảng một giây. Điều này không phải do tải các hình ảnh (mất khoảng mili giây), cũng không phải bởi DrawImage (không mất thời gian chút nào vì nó chỉ lấp đầy một số cấu trúc dữ liệu hiển thị trung gian).
Tôi đoán là chính chuỗi hiển thị sẽ tự động kích hoạt bất cứ khi nào nó nhận được số lượng lớn (~ 20) của các phiên bản BitmapSource mới (tức là, những trường hợp chưa được lưu trong bộ nhớ cache). Hoặc là nó dành rất nhiều thời gian chuyển đổi chúng sang một số định dạng tương thích DirectX nội bộ hoặc nó có thể là một vấn đề bộ nhớ đệm. Nó không thể chạy hết RAM video; Perforator cho thấy các đỉnh ở dưới 60MB, tôi có 256MB. Ngoài ra, Perforator nói rằng tất cả các mục tiêu render đều được tăng tốc phần cứng, vì vậy cũng không thể.
Mọi thông tin chi tiết sẽ được đánh giá cao!
Cảm ơn trước
Daniel
@RandomEngy:
BitmapScalingMode.LowQuality giảm vấn đề một chút, nhưng không thoát khỏi nó. Tôi đã tải gạch ở độ phân giải dự định. Và nó không thể là trình điều khiển đồ họa, được cập nhật (Nvidia).
Tôi hơi ngạc nhiên khi biết rằng việc nhân rộng mất nhiều thời gian. Cách tôi hiểu nó, một bitmap (bất kể kích thước của nó) chỉ được nạp như một kết cấu Direct3D và sau đó được chia tỷ lệ phần cứng. Như một vấn đề của thực tế, một khi bitmap đã được trả lại cho lần đầu tiên, tôi có thể thay đổi luân phiên và quy mô của nó mà không có bất kỳ đóng băng thêm.