C# 性能,加速类中的字符串数组
Posted
技术标签:
【中文标题】C# 性能,加速类中的字符串数组【英文标题】:C# performance, speed up string array in class 【发布时间】:2020-12-27 08:55:36 【问题描述】:我需要更高的性能,这就是我目前所拥有的。
public static class ValidateConditions
public static bool CheckWildCards(string hcdpPlnCvgCD, string HcdpPmtFctrCd, string hccCpmtFctrCd, IBizClaimWorkflowContext workspaceContext, string conditionType)
var patterns = new string[3];
if(condition)
patterns = new string[]
hcdpPlnCvgCD,
"DEF",
"HIJ"
;
else
patterns = new string[]
hcdpPlnCvgCD,
"yyy",
"zzz"
;
var matchResult = dataMart.SponsorPackage.Where(s => Regex.IsMatch(s.ExternalPolicy, pattern)).FirstOrDefault();
我听说这可能是一个性能问题,因为“这些数组应该声明为私有静态,因为我们只在初始化类时创建每个数组一次,而不是在每次调用方法时创建一个新数组。因为它被称为每天一百万次。
所以我对如何实现这一点有点困惑。
我在 private static string[] patterns get; set;
的课堂上考虑这样做,但我最终还是不得不做 `new string[]... 那么我怎样才能真正正确地做到这一点?
更新:修复代码。
【问题讨论】:
(s.ExternalPolicy, pattern)
是什么意思显然这是编译器错误。如果这是使用另一种方法,并且您正在查找模式。我会考虑让他们成为HashSet
。
您知道Where
需要生成bool
? .Where(s => (s.ExternalPolicy, pattern))
在做什么?
public static bool CheckWildCards(data, condition)
@JeremyMiller - 我们总是渴望得到minimal reproducible example。
@Enigmativity 好的,已修复。
【参考方案1】:
变量只初始化一次。
public static class ValidateConditions
private static string[] Patterns1 = new string[]
"ABC",
"DEF",
"HIJ"
;
private static string[] Patterns2 = new string[]
"xxx",
"yyy",
"zzz"
;
public static bool CheckWildCards(MyClass data, bool condition)
var patterns = condition ? Patterns1 : Patterns2;
var matchResult = data.SponsorPackage.Where(s => MyMethod(s.ExternalPolicy, pattern)).FirstOrDefault();
//etc....
【讨论】:
我实际上在里面有变量,所以不是“ABC”而是 hcdpPlan,这就是说它在当前上下文中不存在(它传递给方法 CheckWildCards @JeremyMiller - 所以你的问题实际上并不能反映你真正在做什么? @Enigmativity 好的,已修复 @JeremyMiller - 现在你已经更新了问题,这不再是答案了。 True @Enigmativity 关于我需要做什么的想法?感谢您的耐心等待以上是关于C# 性能,加速类中的字符串数组的主要内容,如果未能解决你的问题,请参考以下文章