[英]Decrypting data and exporting to excel
我有一个SQL服务器数据库,其中包含成千上万行的加密数据,但是,并非所有列都已加密。 我还安装了一个excel导出器,当激活该导出器时,它会遍历每一行,检查该行的每一列以查看它是否是加密cols之一,如果是则对其解密然后继续。
问题在于这涉及嵌套的foreach和检查系统,该系统确实很慢,并且随着DB的增大只会变得更糟。
这是一段很慢的代码示例,在下面的代码中,“ encryptedColumns”是字符串的List <>,是已加密字符串的列名。
这显然效率低下,但有人可以建议快速修复以加快速度吗?
foreach (DataRow dr in dtData.Rows)
{
foreach (DataColumn c in dtData.Columns)
{
if (encryptedColumns.Contains(c.ColumnName.ToLower()))
{
if (!String.IsNullOrEmpty(dRow[c].ToString()))
{
string decryptedTitle = Encryption.DecryptStringAES( dRow[c].ToString(), 'AESKEY goes here');
dRow[c] = decryptedTitle;
}
}
}
}
一点点细节。 上面是动态创建一个excel文档的过程,我遍历所有行,当到达需要解密的列时,我对其进行解密等等。
可能有一个示例行,您可以在其中看到纯文本内容中明显加密的内容。
乔| Bloggs | “£$ D£” $ | 蓝色| “£$%^ FG£$ DF” £$
我将遍历各列,找到需要解密的列,然后对各列进行遍历,而不是遍历每一行并检查每一列(这是O(nxm)
最佳情况下的时间复杂度,因为您经常检查n
行和m
列)值。
列优先方法的平均时间复杂度为O(Const xn) ~ O(n)
,其中Const
是需要解密的列数, n
是行数。 也就是说,您仅迭代需要解密的列,而不检查其他任何行/列。
我还将使用搜索和分页-显示表的一部分,并允许用户来回移动。 没有人能理解一张表,该表向用户抛出了数百万行,但是如果您一次显示100行,则允许分页并搜索未加密的数据,这将解决性能和可用性问题。
您可以尝试的另一件事是并发运行解密,前提是您不修改数据,因此不需要锁定,现在您可以运行多个线程为您解密数据集的不同部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.