C# 什么';s更快-字符串拆分()在我的控制器或razor中包含()?NETMVC

C# 什么';s更快-字符串拆分()在我的控制器或razor中包含()?NETMVC,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我的剃须刀里有一行代码,看起来像这样 @if(spaceEvent.RegisteredStudentIds.Split(',').Contains(@Model.MeStudentId)) { // show some specific HTML } 如果我移除拆分并在控制器中执行拆分,会更快吗? 我甚至可以在控制器中很好地执行.contains()! 或者在这种情况下,这有关系吗?是和否! 否,因为拆分有开销。它应该迭代整个字符串,找到与输入匹配的字符,拆分和生成并返回结果数组 是的

我的剃须刀里有一行代码,看起来像这样

@if(spaceEvent.RegisteredStudentIds.Split(',').Contains(@Model.MeStudentId)) {
   // show some specific HTML
}
如果我移除拆分并在控制器中执行拆分,会更快吗? 我甚至可以在控制器中很好地执行.contains()! 或者在这种情况下,这有关系吗?

是和否! 否,因为
拆分
有开销。它应该迭代整个字符串,找到与输入匹配的字符,拆分和生成并返回结果数组

是的,因为在一个大字符串(例如100MB)中,
string.Contains
应该迭代整个100M个字符,通过输入的第一个字符和下一个字符对每个字符进行比较。。。但是,当您将100万个字分成20万个字时,例如,
IEnumerable.Contains
会将第一个字与输入进行比较,如果第一个字符不匹配,它将跳过其他字符,转到下一个字,然后再转到5个字符。在这个场景中,循环重复200K(取决于输入),例如witch小于100M

如果您有一个大字符串,并且希望多次使用
Contains
方法,请将其拆分并将结果保留到一个数组中,然后使用
array.Contains
方法。

对其进行分析。它们也有不同的功能。拆分将与Rob、ert不匹配,不拆分将不匹配。请参阅:。也就是说,如果您想至少检查一次一个大字符串是否包含一个小字符串,您可以检查是否为零或更高。(小于零意味着:未找到)。除非您有明显的性能问题,否则更快并不重要。也就是说,编程逻辑应该发生在控制器中,而不是视图中。对我来说,没有开销。这两部分都完全在内存中的服务器端执行。当然,如果对它执行相同的代码。我可能不理解您的问题,但主要关注的是在控制器或razor视图右侧执行它?是的,Jakub,这是我的问题。我只是想知道我是否应该将逻辑移动到我的控制器以帮助加快页面加载时间?