当前位置:  开发笔记 > 后端 > 正文

在IIS中部署.PDB文件.有什么好处?

如何解决《在IIS中部署.PDB文件.有什么好处?》经验,为你挑选了3个好方法。

我正在为开发服务器部署ASP.NET和Web服务解决方案到IIS .看起来执行此作业的最后一个人也部署了所有.pdb文件.我问过它,并被告知如果它们留在服务器上,它们"在日志中提供更好的堆栈跟踪信息".

有没有道理呢?我总是将它们留在后面,从不将它们部署到本地机器以外的任何地方.

对于内部开发IIS服务器(不是生产,外部无法访问)是否有理由部署.pdb文件?有什么不好可能发生吗?他们真的提供任何好处吗?



1> CodingWithSp..:

我总是认为.pdb文件只被调试器使用.如果运行时总是检查它们是否有调试信息,这应该意味着在抛出异常时执行速度较慢,因为它必须读取.pdb,对吧?

所以我做了一个快速测试:

using System;
using System.Text;

namespace PdbSpeedTest
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime start = DateTime.Now;
            try
            {
                Program p = new Program();
                p.Looper(0);
            }
            catch (NotImplementedException e)
            {
                Console.WriteLine(e.StackTrace);
            }
            TimeSpan span = DateTime.Now - start;
            Console.WriteLine(span.TotalMilliseconds.ToString());
        }

        internal void Looper(int x)
        {
            try
            {
                if (x < 100)
                    Looper(x + 1);
                else
                    throw new NotImplementedException("blah!");
            }
            catch (NotImplementedException e)
            {
                throw new NotImplementedException("blah!", e);
            }
        }
    }
}

这只是递归100级并引发异常.现在为运行时结果:

作为运行调试构建在同一文件夹中的.pdb:

C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x) in C:\Work\PdbSpeedTest\Program.cs:line 37
   at PdbSpeedTest.Program.Main(String[] args) in C:\Work\PdbSpeedTest\Program.cs:line 16
31.2504

没有 .pdb的情况下作为调试版本运行:

C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x)
   at PdbSpeedTest.Program.Main(String[] args)
15.6252

使用 .pdb 作为发布版本运行:

C:\Work\PdbSpeedTest\bin\Release>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x) in C:\Work\PdbSpeedTest\Program.cs:line 37
   at PdbSpeedTest.Program.Main(String[] args) in C:\Work\PdbSpeedTest\Program.cs:line 16
31.2504

没有 .pdb的情况下作为发布版本运行:

C:\Work\PdbSpeedTest\bin\Release>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x)
   at PdbSpeedTest.Program.Main(String[] args)
15.6252

这些是从常规的旧命令提示符运行,而不是在Visual Studio中运行.所以.pdb肯定会添加堆栈跟踪信息,并减慢异常处理速度.很有意思!


不错的研究:) +1
可能应该**强调**执行速度较慢只会出现异常 - 否则会产生这样的印象:即使使用发布版本,.pdb文件也会损害性能.如果您的代码顺利运行而没有异常,我不相信性能会受到影响(这就是为什么您不应该使用利用异常进行正常分支控制的写代码).

2> Andrew Rolli..:

如果您正在记录异常,那么部署PDB文件可确保异常包括行号(因此Steven A. Lowe已多次通知我;))



3> Dav Evans..:

如果您希望远程调试应用程序,则部署.pdb文件很有用.

有一个MSDN文章在这里解释的过程

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有