Tag: 预加载

预加载程序集:引用,未引用,在需要之前不加载

我想在显示主窗体之前创建一个启动屏幕,显示单个assembly的加载。 我正在做的预加载: Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); foreach (AssemblyName an in a.GetReferencedAssemblies()) { Assembly.Load(an); } 我有两个问题: 问题1: 某些程序集在预加载后加载,即使它们未包含在引用中: ‘x.vshost.exe’(Managed(v4.0.30319)):已加载’C:\ windows \ Microsoft.Net \ assembly \ GAC_MSIL \ PresentationFramework-SystemData \ v4.0_4.0.0.0__b77a5c561934e089 \ PresentationFramework-SystemData.dll’,跳过加载符号。 模块已经过优化,调试器选项“Just My Code”已启用。 ‘x.vshost.exe’(Managed(v4.0.30319)):已加载’C:\ windows \ Microsoft.Net \ assembly \ GAC_MSIL \ PresentationFramework.Aero \ v4.0_4.0.0.0__31bf3856ad364e35 \ PresentationFramework.Aero.dll’,跳过加载符号。 模块已经过优化,调试器选项“Just My Code”已启用。 我可以通过将程序集连接到引用来解决这个问题,但我不想这样做,因为编译器不强迫我。 问题2: 我正在使用telerik RadPadeView。 […]

Preload()的不稳定行为

我在Windows Azure中托管了一个WCF应用程序。 它有IIS v8.0 我已经使用IProcessHostPreloadClient’s Preload()方法进行应用程序预热 现在,我有两个问题: 1)每当我的应用程序池回收时, Preload()函数被调用两次。 我在preload()方法中初始化了一些静态变量,这些变量将在我的工作进程(w3wp.exe)保留。 我所看到的很有趣: 我当前的工作进程ID是( w3wp.exe 1234 ,比方说) 在回收时, preload被调用两次: 第一次:在w3wp.exe中有进程ID : 5678 ,说(一个新的工作进程) 第二次:在w3wp.exe中有进程ID: 1234 (与现有的相同) 现在,我已经配置了我的应用程序池,以便只存在一个w3wp.exe实例。 因此,在发生循环之后,存在的w3wp.exe是进程ID:5678。 我的问题是,为什么一个进程号为1234的死亡w3wp.exe已经执行了预加载 两者之间有3毫秒的差距。 编辑我刚刚了解到,由于应用程序池循环,一个旧的w3wp.exe终止并启动了一个新的w3wp.exe。 导致preload被调用两次的原因是: 1)w3wp.exe的新进程 – 导致在新进程上调用preload()(在我们的示例中为进程ID:5678) 2)w3wp.exe的旧进程(进程ID:1234):其app-domain在被杀死之前重新启动。 因此,当重新启动app域时,会调用preload() 现在,我的问题是为什么一个垂死的w3wp.exe的app-domain重新启动了。 它在接下来的3ms内即将死亡(如上所述) 2)我已经启动了服务,我正在做一些测试。 在此期间,工作进程有时没有提供任何请求。 但我的w3wp.exe有一个连续运行的线程。 我们在一段时间后观察到的是, w3wp.exe的现有实例(进程ID 1234,比如说)突然结束,并且在同一进程中调用了preload()(进程号为1234的w3wp.exe ) 我假设的是,由于某种原因,再次调用预加载。 我曾经认为只有在创建新的w3wp.exe时才会调用preload(反过来意味着app pool已经回收) 这种行为被观察了两次任何人都可以告诉我任何事情 编辑 答案:偏爱:因为app-domain重启。 我仍然不知道为什么app-domain重新启动