1

我使用以下方法将图像转换为 base64 字符串:

FileStream fs = new FileStream(imagePath, FileMode.Open,FileAccess.Read);
byte[] filebytes = new byte[fs.Length];
fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
return Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);

对于每个页面加载,此方法在运行时运行多次。我担心对我网站性能的影响。

我知道它会影响性能,但会显着影响它吗?

4

4 回答 4

5

通常,确定性能影响的最佳方法是对其进行测量。看起来这可能会导致一些 CPU 使用、内存开销和一些磁盘 IO,所以这些是我要注意的问题。使用负载测试工具模拟真实数量的并发用户,看看会发生什么。

对于它的价值,如果这些图像总是相同的,那么您可能可以缓存此方法的输出。

于 2011-07-17T23:00:01.493 回答
2

我认为你会在垃圾收集中失去更多的性能。IDisposable 是我们的朋友。

byte[] filebytes;
using(FileStream fs = new FileStream(imagePath, FileMode.Open,FileAccess.Read))
{
    byte[] filebytes = new byte[fs.Length];
    fs.Read(filebytes, 0, (int)fs.Length);
}
return Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);
于 2011-07-17T23:11:51.387 回答
0

代码中性能最“低效”的部分是从文件系统中读取图像。

进行 base64 编码是一种在内存中完成的非常简单的算法。

于 2011-07-17T23:00:33.603 回答
0

这是否真的会影响您网站的性能取决于您网站的容量以及与您网站所做的一切相比的读取文件和编码文件的时间量。最好的办法是暂时保留代码并添加一些日志记录以了解性能影响是什么。

如果您重复读取相同的文件,您可以添加缓存以将编码文件缓存到内存或将编码文件缓存到磁盘,具体取决于大小和重复文件访问的频率。

于 2011-07-17T23:04:14.470 回答