RDOFolder对象性能低下

问题描述:

我正在研究修改Outlook文件夹的实用程序脚本。为此,我通过COM接口(Windows Script Host/JScript)使用Redemption v5.14。RDOFolder对象性能低下

我有这两个功能是让我的一些信息的数组的RDOFolder的所有子文件夹:

// enumerate all subfolders of an RDOFolder 
function getFolderList(rdoFolder) { 
    if (!rdoFolder) return; 

    return foldersToArray(rdoFolder.Folders).map(getFolderDetails); 
} 

// pull out some details about a single RDOFolder 
function getFolderDetails(rdoFolder) { 
    if (!rdoFolder) return; 

    return { 
     name: rdoFolder.Name, 
     entryID: rdoFolder.EntryID, 
     defaultMessageClass: rdoFolder.DefaultMessageClass, 
     folderCount: rdoFolder.Folders.Count 
    }; 
} 

foldersToArray()只是列举了Folders收集到一个JS数组。

这对于较大的子文件夹列表需要大量的时间 - 对于40个子文件夹而言,需要12秒。

当我减少的最后一个函数的东西,少检索信息:

// pull out some details about a single RDOFolder 
function getFolderDetails(rdoFolder) { 
    if (!rdoFolder) return; 

    return { 
     folderCount: rdoFolder.Folders.Count 
    }; 
} 

则表现还是不错的(一对夫妇十几毫秒40子文件夹)。

但不知何故,甚至访问Name属性(或任何其他)的RDOFolder会增加非常的开销。

为什么会发生这种情况,有没有办法改善它?

RDOFolder使用延迟初始化 - 访问任何属性部队Redemption通过调用IMAPISession::OpenEntry来初始化RDOFolder。为避免打开底层的MAPI文件夹,可以使用ExecSQL(RDOFolder.Folders.MAPITable.ExecSQL)检索PR_DISPLAY_NAME_W, PR_ENTRYID, PR_CONTAINER_CLASS_W, PR_SUBFOLDERS属性 - 请参阅http://www.dimastr.com/redemption/mapitable.htm#ExecSQL

+0

好的,这个工作起来,速度也很快。谢谢!我唯一不明白的就是这个给我的EntryID的格式。这与我从RDOFolder的'EntryID'属性获得的不同,'RDOStore.GetFolderFromID()'似乎并不喜欢它。 – Tomalak

+0

请求'PR_LONGTERM_ENTRYID_FROM_TABLE'(DASL'“http://schemas.microsoft.com/mapi/proptag/0x66700102'')获得正确的值。再次感谢。 – Tomalak