我目前正在处理一个必须连续生成大约 16000 封电子邮件的批次(时事通讯)。
不管它是不是垃圾邮件,我的问题是关于我如何生成这些电子邮件。
消息中的某些字段必须替换为自定义值(日期、用户名等)。
由于某些截止日期和代码可重用性的原因,我的模板是一个 HTML 文件,其中包含一些“_FIELDNAME”字段,可以通过正则表达式轻松发现:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
...
<body>
<p>Hi _NAME, _DATE newsletter.</p>
</body>
...
该文件大约有 1000 行,因此在加载时它是一个相当大的字符串。
首先,我在一个字符串中加载一次 HTML 文件模板:
string template = File.ReadAllText(@"Template/newsletter.html");
替换功能如下所示:
return new StringBuilder(template)
.Replace("_DATE", profileConfig.SelectedMonth.ToString("MMMM yyyy"))
.Replace("_NAME", profileConfig.Name)
.ToString();
问题是内存消耗在每次迭代中都会略有增加。1000 次迭代大约 50MB,这是由于我的替换功能(我试图评论它并且内存泄漏消失了)。
如何替换模板中的许多字段 (~50) 而不会溢出我的 16000 次迭代的内存?我尝试了几件事,比如使用正则表达式(但它使用字符串)或临时文件,但两者都不满意。
在此先感谢您的帮助。