Cách khắc phục 'Tài nguyên hệ thống bị vượt quá' khi di chuyển sang Windows 10
Thông báo lỗi đã vượt quá tài nguyên hệ thống
Gần đây, chúng tôi đã thấy một loạt các khách hàng bị "Vượt quá tài nguyên hệ thống" khi di chuyển sang Windows 10, mặc dù hệ thống hoạt động tốt trong các phiên bản Windows trước. Trong một số trường hợp, chúng tôi đã phát hiện ra vấn đề với các ứng dụng sử dụng nhiều biểu mẫu con trong điều khiển tab, vì vậy, tôi sẽ mô tả một kỹ thuật sẽ ngăn chặn sự cố trong những trường hợp đó khi mỗi tab lưu trữ một biểu mẫu con.
Tab Tạo nên giao diện người dùng tuyệt vời - Cho đến khi hết ký ức
Mới hôm nọ, tôi đang làm việc với ứng dụng của khách hàng là ba cấp độ tab sâu:các tab bên trong các tab, tất cả đều được tải với biểu mẫu con mỗi khi biểu mẫu được mở. Ứng dụng hoạt động tốt trong Windows 7 nhưng gây ra thông báo lỗi "System Resource Exceeded" trong Windows 10. Giải pháp là chỉ tải biểu mẫu con khi người dùng nhấp vào tab và dỡ biểu mẫu con khi họ nhấp vào tab khác.
Private Sub TabTasks_Change()
10 Static LastSubform As Access.SubForm
12 If Not LastSubform Is Nothing then
14 If Len (LastSubform.SourceObject) Then
16 LastSubform.SourceObject =vbNullString
18 End If
20 End If
22 Chọn Case Me.TabTasks.Value
24 Case Me.Orders.PageIndex
25 If Me.frmOrders.SourceObject =vbNullString Then
26 Đặt LastSubform =Me.frmOrders
28 LastSubform.SourceObject =“FrmOrder_sub”
30 End If
32 Case Me.Invoices.PageIndex
34 If Me.frmInvoices.SourceObject =vbNullString Then
36 Đặt LastSubform =Me.frmInvoices
38 LastSubform.SourceObject =“frmInvoices_sub”
40 End If
42 Case Me.Payments.PageIndex
44 If Me.frmPayments.SourceObject =vbNullString Then
46 Đặt LastSubform =Me .frmPayments
48 LastSubform.SourceObject =“frmPayments_sub”
50 End If
52 End Chọn
End Sub
Xem lại mã
Điều kỳ diệu xảy ra trên sự kiện Thay đổi của tab, xảy ra khi người dùng nhấp vào từng tab của điều khiển. Trong mẫu mã ở trên, tôi chỉ quan tâm đến các tab có biểu mẫu con, trong trường hợp này là ba tab. (Kỹ thuật này vô dụng đối với các tab không có biểu mẫu con).
Đối tượng LastSubForm tĩnh, (dòng 10), theo dõi biểu mẫu con cuối cùng được sử dụng và đặt giá trị SourceObject của nó thành null ở dòng 16. Điều này sẽ xóa biểu mẫu của tab trước khỏi bộ nhớ và giữ mức sử dụng bộ nhớ ở mức tối thiểu khi người dùng tắt sang một tab khác.
Câu lệnh select trong dòng 22 được sử dụng để xác định tab nào đã được nhấp vào, sau đó đặt đối tượng LastSubForm thành biểu mẫu con có trong tab và cuối cùng đặt Đối tượng nguồn của biểu mẫu con ở dòng 28. Làm như vậy sẽ ngay lập tức tải biểu mẫu con vào bộ nhớ. Quá trình xử lý được lặp lại cho hai tab khác của điều khiển với các biểu mẫu con.
Ghi nhớ
Để giảm thiểu việc sử dụng bộ nhớ, bạn cần đặt thuộc tính SourceObject của mỗi tab được đề cập thành một chuỗi trống trong chế độ xem thiết kế, nếu không tất cả các biểu mẫu con sẽ tải, điều này làm hỏng mục đích của kỹ thuật.
Tab đầu tiên trong kiểm soát của bạn sẽ tải vì đó là những gì người dùng của bạn sẽ thấy khi họ mở biểu mẫu của bạn.
Chỉ cần thêm các câu lệnh select khác nếu cần nếu bạn cần sử dụng kỹ thuật này với nhiều tab hơn, tôi đã sử dụng nó cho một điều khiển tab có 8 tab.
Nếu bạn có các tab lồng nhau, bạn sẽ cần lặp lại cách tiếp cận cho từng điều khiển tab.
Nếu tên biểu mẫu con của bạn giống với thuộc tính SourceObject của bạn, bạn có thể tối ưu hóa mã hơn nữa bằng cách sử dụng biến chuỗi trong mã.
Nếu bạn thích bài đăng này, hãy chia sẻ nó!
Hãy chia sẻ bài đăng này trên LinkedIn, Twitter và Facebook, nó sẽ được đánh giá cao!
Tham gia cùng tôi trong cuộc họp lần thứ nhất Truy cập bằng SQL Server vào ngày 8 tháng 5, lúc 6:30 chiều CST, để biết thêm chi tiết, vui lòng nhấp vào đây.