C# 代码在生产服务器上的运行速度要慢得多
我有一些非常基本的遗留代码。代码从ZIP文件提取文件,将文件内容从ZIP从XML反序列化为对象,并对这些对象执行某些操作 Zip文件大约为90mb。问题是,此代码在本地计算机上执行约3秒(提取约1.5秒,反序列化所有文件约1.3秒),但当我在Windows server和IIS 6.1上发布该代码时,对同一文件执行相同操作大约需要28秒。14秒提取,13秒反序列化 服务器为VPS,8核,16GB RAM 有人有什么想法吗C# 代码在生产服务器上的运行速度要慢得多,c#,performance,iis,C#,Performance,Iis,我有一些非常基本的遗留代码。代码从ZIP文件提取文件,将文件内容从ZIP从XML反序列化为对象,并对这些对象执行某些操作 Zip文件大约为90mb。问题是,此代码在本地计算机上执行约3秒(提取约1.5秒,反序列化所有文件约1.3秒),但当我在Windows server和IIS 6.1上发布该代码时,对同一文件执行相同操作大约需要28秒。14秒提取,13秒反序列化 服务器为VPS,8核,16GB RAM 有人有什么想法吗 public List<FileNameStream> Un
public List<FileNameStream> UnzipFilesTest(List<string> files, string zippedPathAndFile)
{
//var result = new Dictionary<string, MemoryStream>();
var unzipedFiles = new List<FileNameStream>();
string file1 = System.Web.Hosting.HostingEnvironment.MapPath(zippedPathAndFile);
if (File.Exists(file1))
{
using (MemoryStream data = new MemoryStream())
{
using (Ionic.Zip.ZipFile zipFile = Ionic.Zip.ZipFile.Read(file1))
{
zipFile.ParallelDeflateThreshold = -1;
foreach (ZipEntry e in zipFile)
{
if (files.Contains(e.FileName, StringComparer.OrdinalIgnoreCase))
{
e.Extract(data);
unzipedFiles.Add(new FileNameStream() { FileContent = Encoding.UTF8.GetString(fs..ToArray()), FileName = e.FileName }); //(e.FileName, data);
}
}
}
}
}
return unzipedFiles;
}
public List UnzipFilesTest(列表文件、字符串zippedpath和文件)
{
//var result=newdictionary();
var unzipedFiles=新列表();
字符串file1=System.Web.Hosting.HostingEnvironment.MapPath(zippedPathAndFile);
if(File.Exists(file1))
{
使用(MemoryStream data=new MemoryStream())
{
使用(Ionic.Zip.ZipFile-ZipFile=Ionic.Zip.ZipFile.Read(file1))
{
zipFile.ParallelDeflateThreshold=-1;
foreach(zipFile中的ZipEntry e)
{
if(files.Contains(例如文件名、StringComparer.OrdinalIgnoreCase))
{
e、 提取(数据);
添加(新文件名流(){FileContent=Encoding.UTF8.GetString(fs..ToArray()),FileName=e.FileName});/(e.FileName,data);
}
}
}
}
}
返回解压文件;
}
使用并行优化foreach循环。foreach循环将安排使用多个线程解压缩文件的工作。线程越多,速度就越快。我并不是说这不是服务器上的硬件、网络、防火墙或防病毒问题,但把硬件放在软件问题上是不明智的
下面是一个可能证明有用的例子
您的代码看起来像:
Parallel.ForEach(zipEntires, (e) =>
{
if (files.Contains(e.FileName, StringComparer.OrdinalIgnoreCase))
{
e.Extract(data);
unzipedFiles.Add(new FileNameStream() { FileContent = Encoding.UTF8.GetString(fs..ToArray()), FileName = e.FileName }); //(e.FileName, data);
}
}
使用Parallel.foreach循环优化foreach循环将安排使用多个线程解压缩文件的工作。线程越多,速度就越快。我并不是说这不是服务器上的硬件、网络、防火墙或防病毒问题,但把硬件放在软件问题上是不明智的 下面是一个可能证明有用的例子 您的代码看起来像:
Parallel.ForEach(zipEntires, (e) =>
{
if (files.Contains(e.FileName, StringComparer.OrdinalIgnoreCase))
{
e.Extract(data);
unzipedFiles.Add(new FileNameStream() { FileContent = Encoding.UTF8.GetString(fs..ToArray()), FileName = e.FileName }); //(e.FileName, data);
}
}
这是VPS本身的东西。经过7天的研究,托管提供商的工作人员提出要迁移到一台新机器上,现在一切似乎都正常了。这是VPS本身的事情。经过7天的研究,主机提供商的工作人员提出要迁移到一台新机器上,现在一切似乎都正常了。可能是硬盘驱动器问题,SSD与HDD?90mb文件有什么不同?顺便说一句,本地机器在服务器上没有SSDIs-zip文件,也没有通过网络进行访问?没有。IIS工作进程在本地可能存在硬盘问题,SSD与HDD?90mb文件有多大区别?顺便说一句,本地计算机在服务器上没有SSDIs压缩文件,或者正在通过网络进行访问?没有。IIS工作进程在本地访问