在previous question我问了如何改进一些代码。据说我应该把它移到一个新线程。我以前从来没有想过,所以对我来说这似乎是个好主意。所以今天早上我继续使用了一些我已经拥有的用于处理电子邮件的代码,并更新了处理图片上传到我的网站的方式。安全启动和使用新线程的方式?
那么这是一个开始一个新的线程和处理图像的好方法吗?是否有需要像我一样锁定它?
private static object dummy = new object();
public static void Save(int nProjId, byte[] bData)
{
var worker = new ThreadStart(() => ProcessImage(nProjId,bData));
var thread = new Thread(worker);
thread.Start();
}
private static void ProcessImage(int nProjId, byte[] bData)
{
lock (dummy)
{
try
{
byte[] xlargeImage = Thumbs.ResizeImageFile(bData, 700);
byte[] largeImage = Thumbs.ResizeImageFile(bData, 500);
//improved based on previous question to use the already reduced image
byte[] mediumImage = Thumbs.ResizeImageFile(xlargeImage, 200);
byte[] smallImage = Thumbs.ResizeImageFile(xlargeImage, 100);
//existing code to actually save the images
MyGlobals.GetDataAccessComponent().File_Save(
ConfigurationManager.ConnectionStrings["ImgStore"],
nProjId,
xlargeImage,
largeImage,
mediumImage,
smallImage);
}
catch (Exception)
{
//ToDo: add error handleing
{ }
throw;
}
}
}
哦,图像现在几乎立即(本地)上传和处理,所以这是一个巨大的帮助。我只是想确保这是做到这一点的最佳方式。哦,我正在使用运行Server 2008的双核心机器,使用6gb或ram,所以我有一个小小的摆动空间来使它更快或者使用更多的线程。
我不太确定'File_Save'是否也使用静态资源。我在编程时相当(阅读**非常**)绿色。但要解释它,这是一个调用DAL实际上将文件和一些其他数据保存到数据库。我会在某个时候将文件存储移动到文件系统,但现在只是留在数据库中。但在看它时,它并不表示DAL中的静态,所以我不认为它是。 – 2010-01-09 22:28:51