C# 将映像转换为base64的方法的性能
我使用以下方法将图像转换为base64字符串:C# 将映像转换为base64的方法的性能,c#,performance,optimization,base64,data-uri,C#,Performance,Optimization,Base64,Data Uri,我使用以下方法将图像转换为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, Base64FormattingOpti
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);
对于每个页面加载,此方法在运行时运行数次。我担心对网站性能的影响
我知道它会对性能产生影响,但会对性能产生显著影响吗?一般来说,确定性能影响的最佳方法是测量它。看起来这可能会导致一些CPU使用率、内存开销和一些磁盘IO,所以这些都是我需要注意的问题。使用负载测试工具模拟实际数量的并发用户,看看会发生什么
值得一提的是,如果这些图像总是相同的,那么您可能可以缓存此方法的输出。通常,确定性能影响的最佳方法是测量它。看起来这可能会导致一些CPU使用率、内存开销和一些磁盘IO,所以这些都是我需要注意的问题。使用负载测试工具模拟实际数量的并发用户,看看会发生什么
值得一提的是,如果这些图像总是相同的,那么您可能可以缓存此方法的输出。代码中性能最差的部分是从文件系统读取图像
base64编码是一种非常简单的算法,可以在内存中完成。代码中性能最差的部分是从文件系统读取图像
base64编码是一种非常简单的算法,可以在内存中完成。这是否会影响站点的性能取决于站点的容量,以及与站点所做的其他工作相比,读取和编码文件的时间。最好的做法是暂时保持代码不变,并添加一些日志记录,以了解性能影响
如果重复读取相同的文件,可以将缓存添加到内存中的编码文件或磁盘中的编码文件,取决于文件的大小和重复访问的频率。这是否会影响站点的性能取决于站点的容量以及与站点的其他操作相比读取和编码文件的时间。最好的做法是暂时保持代码不变,并添加一些日志记录,以了解性能影响
如果重复读取相同的文件,则可以将缓存添加到将编码文件缓存到内存或将编码文件缓存到磁盘,具体取决于文件的大小和重复访问文件的频率。我认为在垃圾收集过程中会损失更多性能。我是我们的朋友
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);
我认为你会在垃圾收集中损失更多的性能。我是我们的朋友
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);
您应该检查fs.Read的返回值。它可能不会在一次调用中读取整个文件。您应该检查fs.read的返回值。它可能不会在一次调用中读取整个文件。我是否可以将其添加到静态字典集合中,而不是在后续和后续请求中从该集合而不是文件系统中读取?这样的收藏会增加很多内存使用吗?@业余爱好者:你的想法是怎么不缓存的?增加多少内存显然取决于你的数据,而你正处于一个很好的情况下去发现这一点。如果不小心,您可能会遇到一些有趣的竞争条件,因为像Dictionary这样的数据结构通常不是线程安全的。我建议使用ASP.NET中的内置缓存,而不是缓存。我是否可以将其添加到静态字典集合中,并在后续请求中从该集合而不是从文件系统中读取?这样的收藏会增加很多内存使用吗?@业余爱好者:你的想法是怎么不缓存的?增加多少内存显然取决于你的数据,而你正处于一个很好的情况下去发现这一点。如果不小心,您可能会遇到一些有趣的竞争条件,因为像Dictionary这样的数据结构通常不是线程安全的。我建议使用ASP.NET.Agree中的内置缓存-这是我关心的问题,文件系统读取。有没有其他方法可以在不必从文件系统读取的情况下获得base64图像字符串?如果你没有透视能力,你有时必须读取文件-但你显然可以缓存它。同意-这是我关心的问题,文件系统读取。有没有其他方法可以在不必从文件系统读取的情况下获得base64图像字符串?如果你没有透视能力,有时你必须读取文件,但显然你可以缓存它。