我有一个用蛋白质id填充的数组,并且我在字典中有蛋白质名称和id。我要打印出它在阵列上的每一个蛋白质。这是我用来做这件事的方法,但它不够快,不能做大量的蛋白质。
string txt= "****** ID : {0} , Protien Name : {1} ******";
for (int i = 0; i < codonarray.Length; i++)
{
if (codonarray[i] != null)
{
if (dictionaryproteins.TryGetValue(codonarray[i], out myvalue))
{
Console.WriteLine(txt, codonarray[i], myvalue.name);
}
}
}发布于 2016-09-11 08:01:55
您正在使用的字典查找的性能为O(1) (请参阅:Big O notation)。这意味着一次查找所需的时间几乎是恒定的,并且不依赖于字典的大小。无论字典中有10个还是10,000,000个条目,都无关紧要。
您希望打印数组的每个元素。所以无论如何你都需要遍历数组。您可以在某些LINQ构造中隐藏循环,但循环仍然在那里,不能被优化。这是一个O(n)运算。
这意味着您已经在以最佳方式进行匹配。组合性能(循环+查找)为O(n)。你不能做得更好。
如果您执行I/O操作,那么这很可能是性能问题的根源。试着最小化它们。使用缓冲、缓存等。
仅打印一个摘要或每第n行打印一次。如果仅打印就花费了太多时间,那么读取输出需要多长时间?
发布于 2016-09-11 08:00:04
控制台的打印速度相对较慢。将数据写入文件而不是控制台。
发布于 2016-09-11 08:06:10
string[] fileContent = File.ReadAllLines(@"Phrases\Phrases.txt");然后编码什么是filecontent,在你的例子中是蛋白质信息。
这是一个8980行的文件示例,我将其用于语音识别,以打印到文本框中,您可以根据需要对其进行更改。打印速度真的很快。
string[] fileContent0 = File.ReadAllLines(@"Phrases\Phrases.txt");
_recognizer.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(fileContent0))));https://stackoverflow.com/questions/39431487
复制相似问题