C# 代码在生产服务器上的运行速度要慢得多

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

我有一些非常基本的遗留代码。代码从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> 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工作进程在本地访问