1

有时当我使用 ILMath 等函数时ILMath.linspace,会在没有明显原因的情况下抛出以下异常。

System.TypeInitializationException was unhandled by user code
  HResult=-2146233036
  Message=The type initializer for 'ILNumerics.Misc.ILThreadPool' threw an exception.
  Source=ILNumerics
  TypeName=ILNumerics.Misc.ILThreadPool
  StackTrace:
       at ILNumerics.Misc.ILThreadPool.Wait4Workers(Int32& workerCount)
       at ILNumerics.ILMath.multiplyElem(ILInArray`1 A, ILInArray`1 B)
       at ILNumerics.ILDenseArray`1.op_Multiply(ILDenseArray`1 A, ILDenseArray`1 B)
       at ILNumerics.ILMath.linspace[T](ILBaseArray start, ILBaseArray end, ILBaseArray length)
       at ILNumerics.ILMath.linspace(ILBaseArray start, ILBaseArray end, ILBaseArray length)
       at *** in ***\Numerics\NumericsTest.cs:line 104
       at *** in ***\Numerics\NumericsTest.cs:line 94
  InnerException: System.ComponentModel.Win32Exception
       HResult=-2147467259
       Message=The parameter is incorrect
       Source=System
       ErrorCode=-2147467259
       NativeErrorCode=87
       StackTrace:
            at System.Diagnostics.ProcessThread.set_ProcessorAffinity(IntPtr value)
            at ILNumerics.Misc.ILThreadPool..ctor(Int32 maxThreads)
            at ILNumerics.Misc.ILThreadPool..cctor()
       InnerException:

通过反复试验,我意识到如果我设置了ILNumerics.Settings.UseThreadAffinity = false,那么代码就会毫无错误地执行。我从 ILNumerics 文档中读到UseThreadAffinity应该默认为 false,在我的情况下,默认情况下它肯定设置为 true。这是一个错误吗?另一个问题我注意到文档还提到我可以使用 App.config 来更改默认设置,我尝试过并且ILNIsHosted实际上按照它说的做,但ILNUseThreadAffinityUseThreadAffinity设置没有任何影响。即使我尝试将其设置为假,它仍然是“真”。这是 ILNumerics 的错误吗?我正在使用直接从 NuGet 获得的 ILNumerics 3.2.2.0(任何 CPU)。该代码在 Windows 7 64 位的 VS2010 中运行。

   <appSettings>
    <add key="ILNIsHosted" value="true" />
    <add key="ILNUseThreadAffinity" value="false"/>
   </appSettings>

为了补充原来的问题,我去下载 ILNumerics 社区版的源代码,发现了一些奇怪的东西。

ILSettings.cs 包含以下内容:

public static bool UseThreadAffinity {
    get { return s_isHosted; }
    set { s_isHosted = value; }
}

这些行对我来说没有意义。为什么 UseThreadAffinity 设置为 s_isHosted。我认为这可能是为什么当我将 ILNIsHosted 设置为 true 时,线程关联也更改为 true。

4

0 回答 0