我一直在用
dotnet
在Linux上有一段时间了,我注意到
点网
进程很难崩溃,每当
TypeInitializationException
发生。
当然,解决方案是修复底层类型初始化问题,但我想知道
为什么
这种例外不是
点网
可以恢复,2)我是否可以做些什么来阻止
点网
如果发生这种异常会崩溃吗?未处理的有什么更糟的吗
类型初始化异常
与其他未处理的异常相反?
例子
例如,对我的应用程序的一个api调用最终会命中以下代码行。
特别是在负载测试这个api调用时,我开始看到
点网
撞车。
using (var gThumbNail = System.Drawing.Graphics.FromImage(scaledMap)) {
gThumbNail.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.FromName(backgroundcolor)), 0, 0, width, height);
int masterWidth = large.Width;
int masterHeight = large.Height;
int heightOffset = 0;
int widthOffset = 0;
int oldHeight = height;
int oldWidth = width;
// Scale or crop desired size thumb from master image
if (cropthumb == false) {
var pluckRect = new System.Drawing.Rectangle(large.Width / 2 - width / 2, large.Height / 2 - height / 2, width, height);
var cropRect = new System.Drawing.Rectangle(0, 0, width, height);
gThumbNail.DrawImage(large, cropRect, pluckRect, System.Drawing.GraphicsUnit.Pixel);
} else {
gThumbNail.DrawImage(large, widthOffset / 2, heightOffset / 2, width, height);
}
}
您可以通过实例化一个新的
System.Drawing.Graphics
没有这些特殊的代码-
在没有安装gdi的linux机器上。
有时为了重现崩溃,我不得不用一些负载(5或10个并发用户)来处理它。
当我检查堆芯时,我发现:
Nested exception -------------------------------------------------------------
Exception object: 00007fcab86500b0
Exception type: System.TypeInitializationException
Message: The type initializer for 'Gdip' threw an exception.
InnerException: System.DllNotFoundException, Use !PrintException 00007FCAB864AAC8 to see more.
StackTrace (generated):
SP IP Function
00007FC994FF5A70 00007FCFCD621866 System.Drawing.Common.dll!Unknown+0x56
00007FC994FF5AF0 00007FCFCD621735 System.Drawing.Common.dll!Unknown+0x95
00007FC994FF5B50 00007FCFCD61EADA Acme.App.dll!Unknown+0x9ca
00007FC994FF5F30 00007FCFC5D88ACF System.Private.CoreLib.dll!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+0x1f
00007FC996FF9F40 00007FCFC5DCBEB7 System.Private.CoreLib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)+0x57
00007FC996FF9F60 00007FCFCD5B8CD3 Acme.App.dll!Unknown+0x343
00007FC9F3FFBAF0 00007FCFCD621735 System.Drawing.Common.dll!Unknown+0x95
00007FC9F3FFBB50 00007FCFCD61EADA Acme.App.dll!Unknown+0x9ca
00007FC996FFA040 00007FCFC5D88ACF System.Private.CoreLib.dll!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+0x1f
00007FC9F3FFBF30 00007FCFC5D88ACF System.Private.CoreLib.dll!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+0x1f