优化我的方法

时间:2009-04-13 15:11:26

标签: c#

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

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;
}

3 个答案:

答案 0 :(得分:10)

使用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();
}

答案 1 :(得分:4)

看起来你正试图

  1. 从磁盘读取文件
  2. 根据提供的名称/值地图进行搜索/替换
  3. 如果是这样的话,那么这将是正常的。

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

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

答案 2 :(得分:1)

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