- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
<分区>
Possible Duplicate:
String comparison in dotnet framework 4
我注意到我机器上的一个 UI 应用程序存在性能问题,该应用程序正在执行大量字符串比较以过滤大型列表。我将问题追溯到在对 string.IndexOf 的调用中使用 OrdinalIgnoreCase。以下基准测试是在没有附加调试器的情况下在 Release 中运行的,它是一个在 VS 2010、Windows 7 中构建的 4.0 项目,我在这台机器上安装了 4.5 beta,我不确定这是否会影响它。
1.190 seconds for OrdinalIgnoreCase
0.178 seconds for CurrentCultureIgnoreCase
0.175 seconds for InvariantCultureIgnoreCase
0.101 seconds for Ordinal
0.132 seconds for CurrentCulture
0.126 seconds for InvariantCulture
1.176 seconds for OrdinalIgnoreCase
0.189 seconds for CurrentCultureIgnoreCase
0.183 seconds for InvariantCultureIgnoreCase
0.104 seconds for Ordinal
0.138 seconds for CurrentCulture
0.127 seconds for InvariantCulture
如您所见,OrdinalIgnoreCase 慢了 6.5 倍以上!但是没有 IgnoreCase Ordinal 是最快的。在 multiple places microsoft recommends OrdinalIgnoreCase 以获得最佳性能。任何人都可以复制这些结果或解释为什么 OrdinalIgnoreCase 在此测试中运行得如此慢吗?
private static void Test(string search, string key, StringComparison comparison, int trials)
{
var sw = Stopwatch.StartNew();
for (int i = 0; i < trials; i++)
{
search.IndexOf(key, comparison);
}
Console.WriteLine("{0:0.000} seconds for {1}", sw.ElapsedMilliseconds / 1000.0, comparison);
}
static void Main(string[] args)
{
int trials = 1000000;
var search = Guid.NewGuid().ToString("N");
var key = "34";
Test(search, key, StringComparison.OrdinalIgnoreCase, trials);
Test(search, key, StringComparison.CurrentCultureIgnoreCase, trials);
Test(search, key, StringComparison.InvariantCultureIgnoreCase, trials);
Test(search, key, StringComparison.Ordinal, trials);
Test(search, key, StringComparison.CurrentCulture, trials);
Test(search, key, StringComparison.InvariantCulture, trials);
Test(search, key, StringComparison.OrdinalIgnoreCase, trials);
Test(search, key, StringComparison.CurrentCultureIgnoreCase, trials);
Test(search, key, StringComparison.InvariantCultureIgnoreCase, trials);
Test(search, key, StringComparison.Ordinal, trials);
Test(search, key, StringComparison.CurrentCulture, trials);
Test(search, key, StringComparison.InvariantCulture, trials);
}
这段代码是一个简单的词汇-翻译器。我可以使用 StringComparison.CurrentCultureIgnoreCase,以便在您输入 textBox1 时不考虑注册单词吗? using Sy
我需要支持可以在输入文本中使用非 ascii 字母的语言,因此我需要为 FirstUnmatchedIndex 实现 StringComparison.CurrentCultureIgnoreCase
在C#中做字符串比较时,和a有什么区别 string test = "testvalue"; test.Equals("TESTVALUE", StringComparison.CurrentCult
我在代码中有多个实例,我们在这些实例中完成了 StringComparison.CurrentCultureIgnoreCase 以比较两个字符串的相等性。鉴于,- 在我们的代码中,字符串基于单一文化
我一直在使用 StringComparer.CurrentCultureIgnoreCase用于不区分大小写的比较和散列。但是在检查了引用源之后,我看到它在每次调用时都会创建一个新实例(那么它不应该是
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: String comparison in dotnet framework 4 我注意到我机器上的一个 UI
我是一名优秀的程序员,十分优秀!