我有一个函数(pattern1,pattern2),它迭代两个字符串,如
for (int i = 0; i <= len; i+=8)
{
for (int j = 1; j <= len - i; j+=8)
{
subpattern = pattern1.Substring(i, j);
..
我需要检查的是pattern2.Contains(子模式)。 为了测试,我加载了一个大约100KB的流(.jpg文件)作为模式。如果它不包含,它只会调用break;
现在这段代码平均完成约5.5kms。我尝试用几乎任何我想出的东西进行优化,但没有成功。
我尝试的是:
HashSet<string> positive = new HashSet<string>();
HashSet<string> negative = new HashSet<string>();
每次pattern2包含子模式时,我都会将其添加到&#34; positive&#34;哈希,否则添加到负面。我首先检查了否定哈希是否包含模式,如果它确实我叫做break;
如果这是假的,我检查了正哈希是否包含模式,如果是,我做了我必须做的事情,然后调用继续;
如果没有找到正面或负面的模式,我检查了pattern2.Contains(子模式)并根据结果将新的子模式添加到正或负哈希
这使得速度提高了0毫秒......但是我无法绕过原因?从理论上和统计上来说它应该至少增加一点速度?我尝试只使用正面和仅负面哈希,不同的检查顺序(正&gt;负&gt;包含)(负&gt;正&gt;包含)但我仍然每次都获得5.5k ms。
我也尝试过使用SortedSet,因为它的.Contains()实现了二进制搜索,据我所知,由于常量排序,这导致平均速度为6k ms。
列表执行超过8kms~
我忽略了一些明显的东西吗?当然,增加i,j的增量使它更快,但我试图避免这种情况。