C# 优化我的方法

C# 优化我的方法,c#,C#,我正在尝试创建一个实用方法,在模板文件上执行类似邮件合并的功能。由于字符串是不可变的,我不确定我是否正确编写了它-有人能看一眼并给我反馈吗 public static string LoadTemplateFile(string fileName, NameValueCollection mergeFields) { string result = System.IO.File.ReadAllText(fil

我正在尝试创建一个实用方法,在模板文件上执行类似邮件合并的功能。由于字符串是不可变的,我不确定我是否正确编写了它-有人能看一眼并给我反馈吗

public static string LoadTemplateFile(string fileName, 
                                      NameValueCollection  mergeFields)
{
    string result = System.IO.File.ReadAllText(fileName);

    if (mergeFields != null)
    {
        for (int index = 0; index < mergeFields.Count; index++)
        {
            result = result.Replace(mergeFields.Keys[index], 
                                    mergeFields[index]);
        }
    }

    return result;
}
公共静态字符串LoadTemplateFile(字符串文件名,
NameValueCollection(合并字段)
{
字符串结果=System.IO.File.ReadAllText(文件名);
如果(合并字段!=null)
{
对于(int index=0;index
您最好使用StringBuilder而不是字符串

public static string LoadTemplateFile(
    string fileName, NameValueCollection  mergeFields)
{    
    System.Text.StringBuilder result = new System.Text.StringBuilder(
        System.IO.File.ReadAllText(fileName));

    if (mergeFields != null)
    {
        for (int index = 0; index < mergeFields.Count; index++)
        {
            result.Replace(mergeFields.Keys[index], 
                                    mergeFields[index]);
        }
    }

    return result.ToString();
}
公共静态字符串LoadTemplateFile(
字符串文件名、NameValueCollection合并字段)
{    
System.Text.StringBuilder结果=新建System.Text.StringBuilder(
System.IO.File.ReadAllText(文件名));
如果(合并字段!=null)
{
对于(int index=0;index
您最好使用StringBuilder而不是字符串

public static string LoadTemplateFile(
    string fileName, NameValueCollection  mergeFields)
{    
    System.Text.StringBuilder result = new System.Text.StringBuilder(
        System.IO.File.ReadAllText(fileName));

    if (mergeFields != null)
    {
        for (int index = 0; index < mergeFields.Count; index++)
        {
            result.Replace(mergeFields.Keys[index], 
                                    mergeFields[index]);
        }
    }

    return result.ToString();
}
公共静态字符串LoadTemplateFile(
字符串文件名、NameValueCollection合并字段)
{    
System.Text.StringBuilder结果=新建System.Text.StringBuilder(
System.IO.File.ReadAllText(文件名));
如果(合并字段!=null)
{
对于(int index=0;index
看起来您正试图

  • 从磁盘读取文件
  • 根据提供的名称/值映射执行搜索/替换
  • 如果是这样的话,那么是的,这很好

    我得到的唯一真实反馈是,根据替换名称/值对的数量,您将创建大量临时字符串。这对于小文件来说可能很好,但一旦开始将相对较大的文件加载到应用程序中,您可能会看到明显的差异


    更好的方法是使用StringBuilder并对该对象执行替换调用。这将减少不必要的临时字符串创建。

    看起来您正在尝试

  • 从磁盘读取文件
  • 根据提供的名称/值映射执行搜索/替换
  • 如果是这样的话,那么是的,这很好

    我得到的唯一真实反馈是,根据替换名称/值对的数量,您将创建大量临时字符串。这对于小文件来说可能很好,但一旦开始将相对较大的文件加载到应用程序中,您可能会看到明显的差异



    更好的方法是使用StringBuilder并对该对象执行替换调用。它将减少不必要的临时字符串创建。

    使用StringBuilder而不是字符串。这是我唯一的建议,它的速度更快。

    使用StringBuilder而不是string。这是我唯一的建议,它的速度更快。

    我看不到任何字符串连接,为什么要使用StringBuilder?因为StringBuilder执行的操作通常更快,因为它维护自己的内部缓冲区,因此您可能会也可能不会最终创建中间字符串,而您保证使用string.Replace()创建它们我猜StringBuilder.Replace和StringBuilder.Replace的工作方式不同:即:字符串返回字符串和StringBuilder在内部修改字符串不是在内部修改,而是不是强制执行操作,而是记录您的操作,然后在调用ToString时执行这些操作,只有通过避免临时分配才能做到这一点。我看不到任何字符串连接,为什么要使用StringBuilder?因为StringBuilder执行的操作通常更快,因为它维护自己的内部缓冲区,所以您可能会也可能不会最终创建中间字符串,虽然您保证使用string.Replace()创建它们,但我猜StringBuilder.Replace和string.Replace的工作方式不同:即:string返回字符串,StringBuilder在内部修改字符串不是在内部修改它,不是在强制执行操作,而是记录您的操作,然后当你调用ToString时,它会执行这些操作,只是它通过避免临时分配来执行。优化内存使用或性能?效率。我用的是JaredPar的方法。你所有的钥匙都有相同、相似的前缀吗?在此基础上拆分,然后检查每个子字符串,根据需要替换,然后合并。嵌套键需要多次传递。优化内存使用或性能?效率。我用的是JaredPar的方法。你所有的钥匙都有相同、相似的前缀吗?在此基础上拆分,然后检查每个子字符串,根据需要替换,然后合并。嵌套键需要多次传递。我从未想过使用StringBuilder的替换方法。当我使用StringBuilder时,我通常是从头开始创建字符串。谢谢你的解释!不知道为什么后来的答案没有代码会被标记,但很高兴你把它修好了@亚当-这很奇怪-我调出贾里德的回答,但我没有看到你的。很抱歉我从未想过使用StringBuilder的替换方法。当我使用StringBuilder时,我通常是从头开始创建字符串。谢谢你的解释!不知道为什么后来的答案没有代码会被标记,但很高兴你把它修好了@亚当-这很奇怪-我调出贾里德的回答,但我没有看到你的。很抱歉