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# 性能,加速类中的字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

C# 字符串与字节数组相互转换

c#中Array类中的常用方法的功能

大字节数组的 C# 程序性能 [重复]

[转载]C#如何清除字符串数组中的重复项

使用 C#,将包含二进制数据的字符串转换为字节数组的最有效方法是啥

c#中的字符串拆分返回一个空数组