相关疑难解决方法(0)

装载机锁定错误

我在C++ dll上构建,通过在C#中编写代码.

我得到一个错误,说

检测到LoaderLock消息:尝试在OS Loader锁定内执行托管执行.不要尝试在DllMain或图像初始化函数中运行托管代码,因为这样做会导致应用程序挂起.

我试着搜索这个错误究竟意味着什么,但是我正在绘制毫无意义的文章,大多说这只是一个警告,我应该在Visual Studio中关闭它.其他解决方案似乎是由于ITunes,或者在使用DirectX进行编程时出现此问题.我的问题与两者无关.

任何人都能解释一下,这究竟意味着什么?

c# loaderlock

90
推荐指数
5
解决办法
7万
查看次数

是什么让Enum.HasFlag这么慢?

我正在做一些速度测试,我注意到Enum.HasFlag比使用按位操作慢大约16倍.

有谁知道Enum.HasFlag的内部以及为什么它如此之慢?我的意思是两倍慢不会太糟糕但是当它慢了16倍时它会使该功能无法使用.

如果有人想知道,这是我用来测试其速度的代码.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace app
{
    public class Program
    {
        [Flags]
        public enum Test
        {
            Flag1 = 1,
            Flag2 = 2,
            Flag3 = 4,
            Flag4 = 8
        }
        static int num = 0;
        static Random rand;
        static void Main(string[] args)
        {
            int seed = (int)DateTime.UtcNow.Ticks;

            var st1 = new SpeedTest(delegate
            {
                Test t = Test.Flag1;
                t |= (Test)rand.Next(1, 9);
                if (t.HasFlag(Test.Flag4))
                    num++;
            });

            var st2 = new SpeedTest(delegate
            {
                Test t = …
Run Code Online (Sandbox Code Playgroud)

.net c#

64
推荐指数
3
解决办法
2万
查看次数

Delphi DLL是否预定用于加载程序锁?

有一个DLL,由主(桌面)应用程序动态加载Windows.LoadLibrary.那是因为有很多类似的DLL,并且只需要在运行时加载很少的单个DLL.因此静态链接不是一种选择.

问题是,在加载其中一个DLL时,主应用程序每隔一段时间就会挂起.请注意,问题很可能发生在每一个问题上.可能是因为他们有很多共同的代码库.

问题似乎是装载机锁定(请参阅此SO答案).我发现了一张共同的代码,即在所使用的由所有的DLL在启动时begin...end所述的-section library-单元(即project.dpr),其中GetModuleHandleGetProcAddress使用.

我发现,这是一个完全没有DLL的东西,因为begin...endDLL的项目文件的部分实际上是库的DllMain函数,并且调用这样的函数会导致死锁(命名加载器锁).我在本微软最佳实践指南中读到了这一点.

所以我重建了我的代码,这些调用稍后在调用Windows.LoadLibrary完成后调用.

不幸的是,悬挂问题仍然存在.:-(

然后我运行调试器,逐步完成在执行一行代码之前调用的每个初始化.我确定,许多第三方代码违反了DLL初始化代码中要做什么和不做什么的指南:

  • TMS组件包
  • JEDI组件库
  • OmniThreadLibrary
  • Indy组件

所有上述动态加载其他DLL在initialization代码或请求过程指针通过GetProcAddress.我认为这些调用导致我的DLL加载时挂起.

是的,只有少数Delphi开发人员知道危险initialization吗?我该怎么办?

delphi dll dynamic-linking

7
推荐指数
1
解决办法
725
查看次数

标签 统计

c# ×2

.net ×1

delphi ×1

dll ×1

dynamic-linking ×1

loaderlock ×1