使用QPixmapCache来加速性能

时间:2013-12-08 05:57:13

标签: pyqt pyqt4 pyside qpixmap

我正在尝试在我的PyQt4应用中使用QPixmapCache,但它似乎还需要时间,任何人都可以查看下面的代码:

def data(self, index, role):

        if index.isValid() and role == QtCore.Qt.DecorationRole:
            row = index.row()
            column = index.column()
            value = self._listdata[row][column]
            key = "image:%s"% value
            pixmap = QtGui.QPixmap()
            # pixmap.load(value)
            if not QtGui.QPixmapCache.find(key, pixmap):
                pixmap=self.generatePixmap(value)
                QtGui.QPixmapCache.insert(key, pixmap)
            # pixmap.scaled(400,300, QtCore.Qt.KeepAspectRatio)
            return QtGui.QImage(pixmap)

        if index.isValid() and role == QtCore.Qt.DisplayRole:
            row = index.row()
            column = index.column()
            value = self._listdata[row][column]
            fileName = os.path.split(value)[-1]
            return os.path.splitext(fileName)[0]

    def generatePixmap(self, value):
        pixmap=QtGui.QPixmap()
        pixmap.load(value)
        pixmap.scaled(100, 120, QtCore.Qt.KeepAspectRatio)
        return pixmap

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试从文件名列表中创建图像缓存。

首次加载图像时,如果有大量相同的图像,缓存只会提高性能。每个图像必须至少创建一次,因此如果图像全部(或大部分)不同,它们将不会加载更快。事实上,由于缓存本身的开销,整体性能可能略微更差

如果应用程序需要不断刷新图像列表,缓存只会提供性能提升(在这种情况下,您需要检查磁盘上的文件是否在此期间没有更改)。

您还应该注意到QPixmapCache有一个cache limit,默认情况下,桌面系统为10 MiB。不过,这可以设置为你喜欢的任何值。