在项目中涉及到很多个模块,每个模块涉及到很多的子窗体,为了美观,做了很多的图片,在开发过程中,起初是把图片全部拖到Resources里面作为资源来加载,发现这样很卡,分析是加载到Resources中的图片,会在编译时就加入了程序集中,在程序启动的时候,即使没有用到它,也会占用了内存,所以影响了效率。
对此问题解决的思路是,通过建立一个目录来存放图片文件,图片文件的目录信息可以在XML中读取,所以可以配置,然后在调用每个子窗体的时候,动态的通过读取文件的形式,来加载需要的图片,这样,运行明显快了很多。
在此贴点读文件的简单代码,如下:
/// <summary>
/// 通过文件名读取指定的Image文件
/// </summary>
/// <param name="fileName">此处的文件名必须包括后缀名,否则无法正常的读取</param>
private void GetImageFile(string fileName)
{
if (this._path != string.Empty && fileName!=string.Empty)
{
if (Directory.Exists(this._path))
{
string fullFileName = this._path + "//" + fileName;
if (File.Exists(fullFileName))
{
FileStream fs = new FileStream(fullFileName, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
MemoryStream ms = new MemoryStream(buffer);
this._curImage = Image.FromStream(ms);
}
else
MessageBox.Show("文件名错误或者文件不存在.");
}
else
{
MessageBox.Show("文件名或者目录错误.");
}
}
}
/// <summary>
/// 通过文件名和后缀来读取指定路径下面的文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="fileExtension">后缀名</param>
public void GetImageFile(string fileName, string fileExtension)
{
if (fileName != string.Empty && fileExtension != string.Empty)
{
string newFileName = fileName + fileExtension;
this.GetImageFile(newFileName);
}
}
/// <summary>
/// 设置指定控件的背景图片
/// </summary>
public void SetImageToControl(Control targetControl)
{
if (targetControl != null && this._curImage != null)
{
targetControl.BackgroundImage = this._curImage;
}
}