2012-04-29 50 views
9

Tôi đang làm việc trên một dự án yêu cầu lưu trữ bitmap trên một bảng. Các bitmap này được sử dụng trong bộ điều hợp dữ liệu được hiển thị trên danh sách. Bảng này có thể chứa hơn 1000 hình ảnh. Lý do tôi hiện không lưu trữ là vì tôi có thể đọc và ghi hình ảnh nhanh đến mức nào.Con trỏ SQLite hoạt động như thế nào?

Điều tôi đang tìm kiếm cơ bản là hiểu các giới hạn của con trỏ của SQLite. Con trỏ được nạp vào bộ nhớ như thế nào? Liệu nó đặt kết quả truy vấn trong bộ nhớ hay nó tạo ra một số loại tập tin đọc/ghi tạm thời? Tôi không muốn gặp phải vấn đề khi truy vấn một tập dữ liệu lớn làm cho thiết bị hết bộ nhớ.

+0

Có [CursorWindow] (http://developer.android.com/reference/android/database/CursorWindow.html) và nó có vẻ được sử dụng để chỉ tải các phần của truy vấn bất cứ khi nào bạn 'moveToXyz'. Dữ liệu nên đến trực tiếp từ cơ sở dữ liệu. – zapl

+0

"Tôi đang làm việc trên một dự án yêu cầu lưu trữ bitmap trên một bảng." - ick. "Bảng này có thể chứa hơn 1000 hình ảnh". - thêm ick. "Lý do tôi hiện không lưu trữ là vì tôi có thể đọc và ghi hình ảnh nhanh đến mức nào." - theo định nghĩa, một tệp sẽ nhanh hoặc nhanh hơn, vì SQLite phải lưu trữ nội dung của nó trong một tệp. – CommonsWare

+0

zapl cảm ơn thông tin đó. @CommonsWare Không chắc chắn những gì ick có nghĩa là: P Tôi nghĩ rằng nó xuất hiện rằng nó nên được nhanh chóng hoặc nhanh hơn để đọc từ tập tin hơn db. Tôi không biết nhiều về con trỏ khác với cách sử dụng chúng ... nhưng SQLite không tối ưu hóa cao cách bạn đọc từ dữ liệu của nó? Tôi có nghĩa là đọc dữ liệu hình ảnh từ tập tin nhiều lần có vẻ chậm hơn rất nhiều so với việc đọc chúng từ một con trỏ. – Jona

Trả lời

0

Đây là một bài đăng cũ tôi đã làm. Giải pháp của tôi là lưu hình ảnh vào tệp và lưu đường dẫn đến hình ảnh vào bảng cơ sở dữ liệu. Điều này là sạch hơn và dường như nhanh hơn nhiều.

Ý tưởng lưu dữ liệu nhị phân lớn vào bảng không có vẻ là điều đúng đắn cần làm. Tôi không có thông tin chi tiết về lý do tại sao không phải là một ý tưởng hay nhưng đó chỉ là cảm giác của tôi từ một chút nghiên cứu.

1

Nếu tôi nhớ lại, nó sẽ giữ lại tuy nhiên nhiều kết quả được lưu trong bộ nhớ cache trong bộ nhớ có thể. Nó nên ở bên dưới soft heap limit, thường. Nó là một giới hạn tư vấn, vì vậy nó sẽ thích vượt qua giới hạn hơn là trả về SQL_NOMEM.

Tôi không tin nó ghi vào đĩa cho bất kỳ cơ chế lưu bộ nhớ cache nào. Miễn là mỗi hình ảnh có thể vừa với bộ nhớ, và chúng không nằm trong các chỉ mục, nó không phải là một vấn đề.

Tôi không phải là lập trình viên Android, cho những gì nó đáng giá. Một số trong những điều này có thể đã được tùy chỉnh.

Làm nền, sqlite_step là con trỏ trong thư viện mặc định. Tôi không biết liệu Android có thực hiện cơ chế riêng của mình hay không. Bạn có thể tìm thấy một số thông tin chung trên trang của họ về dynamic memory allocation.

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