我有一个Web应用程序,允许用户将DICOM和非DICOM文件上传到他们的帐户。我正在使用 JavaScript , HTML5 , Webkitdirectory , Chrome 和数据表来填充所选内容UI上的文件。我面临的问题是 -
从本地计算机中选择文件时,以下代码似乎运行得非常快,并且所选文件立即在UI上填充,但是当从CD中选择相同数量的文件时,在UI上呈现需要时间。这是一个例子 -
对于包含20个DICOM + 2个非DICOM研究的CD,以及大约2241个图像,第一次填充列表大约需要 5-6分钟 在UI上。如果我尝试选择相同的CD文件夹,列表将填入 大约 60秒,如果它在之前已经填充过一次 会话。
但是,如果我使用本地计算机上的同一组文件,那么在UI上填充大致需要6到7秒。
这是我为每个DICOM文件执行的代码 -
var fileReader = new FileReader();
fileReader.onload = function(evt){
console.log("Completed Reading");
var arrayBuffer = fileReader.result;
var byteArray = new Uint8Array(arrayBuffer);
_parseDicom(byteArray);
try {
if (fileReader.readyState !== 2) {
fileReader.abort();
}
}
catch (err) {
console.log('error occured: '+err);
}
}
var blob = f.slice(0, 50000);
console.log("Starting to Read");
fileReader.readAsArrayBuffer(blob);
在分析了我提出的问题之后,
我猜基本的东西是,操作系统需要时间将CD安装到内存中,因为它是一个外部驱动器。 如果我们第二次访问需要的时间更少,因为CD内容已经安装。
&#34;开始阅读&#34; 和&#34;完成阅读&#34; 之间的时间相对更多< / strong>从CD读取文件而不是从本地机器读取文件。
我还尝试寻找 DICOMDIR文件,它是光盘中包含的所有研究文件的索引,并且正是出于这个原因而包括在内:以避免对光盘进行冗长的扫描。但我没有找到任何标准或方法来解析 JavaScript中的DICOMDIR文件
有没有办法减少从CD读取文件所花费的时间?
更新 -
我现在可以使用dicomParser将DICOMDIR文件结构转换为JavaScript - https://github.com/chafey/dicomParser
var fr = new FileReader();
fr.onload = function(evt){
var byteArray = new Uint8Array(fr.result);
try {
var dataSet = dicomParser.parseDicom(byteArray);
_searchDicom(dataSet, f);
} catch (err) {
if (typeof err.dataSet != 'undefined') {
_searchDicom(err.dataSet, f);
}
}
}
var blob = f.slice(0, 1000000);
fr.readAsArrayBuffer(blob);
function _searchDicom(dataset,f) {
var data = dataset.elements.x00041220.items;
if(data) {
data.forEach(function (e) {
if (e.dataSet.string('x00041430') === 'PATIENT') {
console.log("Patient Name - "+e.dataSet.string('x00100010'));
}
else if (e.dataSet.string('x00041430') === 'STUDY') {}
else if (e.dataSet.string('x00041430') === 'SERIES') {}
else if (e.dataSet.string('x00041430') === 'IMAGE') {}
});
}
}
对象的结构类似于 -
https://rawgit.com/chafey/dicomParser/master/examples/dumpWithDataDictionary/index.html
当我们上传任何DICOMDIR文件时。
这里的问题是我无法收集所有患者,研究,系列或图片一旦。我找到的唯一解决方案是迭代并检查是否患者,学习,系列或图片对象
是否有更好的方法/标准检索?