Chúng tôi đã sử dụng phần mềm Ants Profiler Pro by Red Gate trong dự án của chúng tôi. Nó hoạt động thực sự tốt cho tất cả các ứng dụng dựa trên ngôn ngữ .NET.
Chúng tôi thấy rằng .NET Garbage Collector rất "an toàn" trong việc dọn sạch các đối tượng trong bộ nhớ (như nó phải vậy). Nó sẽ giữ các vật thể xung quanh chỉ vì chúng ta có thể sẽ sử dụng nó trong tương lai. Điều này có nghĩa là chúng ta cần phải cẩn thận hơn về số lượng đối tượng mà chúng ta bị thổi phồng trong bộ nhớ. Cuối cùng, chúng tôi đã chuyển đổi tất cả các đối tượng dữ liệu của mình thành "tăng theo yêu cầu" (ngay trước khi một trường được yêu cầu) để giảm chi phí bộ nhớ và tăng hiệu suất.
EDIT: Đây là một lời giải thích thêm về những gì tôi có nghĩa là "tăng theo yêu cầu." Trong mô hình đối tượng của cơ sở dữ liệu của chúng tôi, chúng tôi sử dụng Thuộc tính của đối tượng cha để hiển thị (các) đối tượng con. Ví dụ: nếu chúng tôi có một số bản ghi tham chiếu một số bản ghi "chi tiết" hoặc "tra cứu" khác trên cơ sở một-một, chúng tôi sẽ cấu trúc nó như sau:
class ParentObject
Private mRelatedObject as New CRelatedObject
public Readonly property RelatedObject() as CRelatedObject
get
mRelatedObject.getWithID(RelatedObjectID)
return mRelatedObject
end get
end property
End class
Chúng tôi thấy rằng hệ thống trên đã tạo ra một số vấn đề về bộ nhớ và hiệu năng thực khi có rất nhiều bản ghi trong bộ nhớ. Vì vậy, chúng tôi đã chuyển sang một hệ thống nơi các đối tượng chỉ bị thổi phồng khi chúng được yêu cầu và các cuộc gọi cơ sở dữ liệu chỉ được thực hiện khi cần thiết:
class ParentObject
Private mRelatedObject as CRelatedObject
Public ReadOnly Property RelatedObject() as CRelatedObject
Get
If mRelatedObject is Nothing
mRelatedObject = New CRelatedObject
End If
If mRelatedObject.isEmptyObject
mRelatedObject.getWithID(RelatedObjectID)
End If
return mRelatedObject
end get
end Property
end class
Điều này hóa ra hiệu quả hơn nhiều vì các đối tượng được giữ ngoài bộ nhớ cho đến khi chúng cần thiết (phương thức Get được truy cập). Nó cung cấp một sự gia tăng hiệu suất rất lớn trong việc hạn chế các lần truy cập cơ sở dữ liệu và tăng rất nhiều dung lượng bộ nhớ.