标签: dynamic-loading

在一个进程中加载​​的最大appdomains数

由于动态程序集加载需要appdomain加载以启用使用卸载相关appdomain来终止程序集,是否在要加载的进程中有"最大"数量的appdomains?我在想一个基于服务器的应用程序,每个用户都可以动态运行他的专有C#代码.但是,如果2000用户登录并加载他们的代码怎么办?除了appdomians的数量之外,我可能遇到任何可能的限制吗?

谢谢.

.net c# appdomain dynamic-loading

5
推荐指数
2
解决办法
3821
查看次数

调用dlclose(NULL)是否安全?

当我将null指针传递给我时遇到崩溃dlclose.

我应该在打电话前检查空dlclose吗?

POSIX对此没有任何说明:http: //pubs.opengroup.org/onlinepubs/7908799/xsh/dlclose.html

它是未定义的行为还是dlclose实现中的错误?

linux posix shared-libraries dynamic-loading dynamic-library

5
推荐指数
1
解决办法
1084
查看次数

在运行时加载jvmti的java代理,从内部卸载

我正在编写一个Java代理来与JVMTI进行交互.由于我不会涉及的原因,我需要使用JVMTI(java流程中的C接口)而不是Java API java.lang.instrument或JDI.我希望能够做一些似乎不能直接支持的事情.

  1. 有没有办法在Java进程启动后加载代理?
  2. 有没有办法从JVMTI代码内部或从进程外部卸载Java代理(没有杀死整个Java进程)?例如,dlclose()如果我能找到动态加载模块的句柄,我可以安全地从JVMTI代码调用吗?

如果无法完成这些操作,是否有办法在加载后将数据传递给Java代理?有没有通过某些Java命令行实用程序执行此操作的常规方法?如果没有,我可以安全地创建一个线程并让它在我的代理的代码中使用标准的C或C++库调用来监听套接字吗?

如果它有帮助,不要担心用你的答案支持Windows - 我正在进行这个项目来扩展一个只有Unix的调试工具.

注意:我已经看过这个但是认为可能有一些正常的方法来做这个不在JVMTI标准中.

java debugging dynamic-loading dlopen jvmti

5
推荐指数
1
解决办法
1039
查看次数

如何在不重新启动应用程序的情况下动态加载我的C#应用​​程序的一部分?

我的C#应用​​程序server.exe对我的业务运营至关重要,理想情况下需要24/7不间断地运行.代码是坚如磐石的,但是我无法控制的一件事是由第三方生成的入站数据源质量差.我偶尔会收到包含异常的数据Feed,在这种情况下我必须:

  • 更新内部的Feed处理代码server.exe以适应异常
  • 重新编译
  • server.exe使用新代码重新启动,并允许处理语法上有缺陷的feed

整个过程通常需要不到几分钟,但重新启动server.exe会导致某些非关键状态信息的重置,更糟糕的是,会导致外部进程中断,这取决于server.exe.

我的目标:将Feed处理代码隔离到一个单独的DLL中,其内容可以在不重新启动的情况下进行更新server.exe. 我该怎么做呢?

请允许我解释一下我在撰写此论坛帖子之前所做的工作:

Feed进程处理器界面已移至名为的新程序集common.dll.界面看起来像这样:

public interface IFeedProcessor{
    bool ProcessFeed(String filePath);  //returns false on failure, true on success
}
Run Code Online (Sandbox Code Playgroud)

Server.exe现在参考common.dll.

Feed进程本身已被移动到一个名为的新程序集feedProcessors.dll.实现看起来像这样:

internal class FeedProcessor1:IFeedProcessor{
    public FeedProcessor1(){}
    bool ProcessFeed(String filePath){/*implementation*/return true;}
}

internal class FeedProcessor2:IFeedProcessor{
    public FeedProcessor2(){}
    public bool ProcessFeed(String filePath){/*implementation*/return true;}
}

[... and so on...]
Run Code Online (Sandbox Code Playgroud)

feedProcessors.dll还包含一个名为的类FeedProcessorUtils,用于根据某些配置输入创建特定的Feed处理程序.它看起来像这样:

public class FeedProcessorUtils{
    public static void CreateFeedProcessor(int feedType …
Run Code Online (Sandbox Code Playgroud)

.net c# dynamic-loading .net-assembly

5
推荐指数
1
解决办法
98
查看次数

启用死代码剥离是否不好?

我的iOS项目用于dlsym动态指向可选的C库。没有该项目的可选as-in可以随我们一起运行,它只是添加了功能。

有关背景信息:在运行时在Objective-C中检测并使用可选的外部C库

问题是,XCode清除了“未使用”的库。使用dlsym方法没有直接引用我的第三方库,XCode删除了它。

我以为自己在“其他链接器标记”中找到了解决方案,在 -force_load "$(SRCROOT)/my_external.a"模拟器中效果很好。(-all_load效果也不错,但对我来说似乎太过分了)。

问题是当我移至真实设备时,此解决方法失败,并且库未加载(与相同-all_load)。

唯一起作用的是在XCode中禁用名为的功能Dead Code Stripping

问题是:禁用或建议我的客户禁用此功能真的不好吗?如果是这样,还有更好的选择吗?

c xcode dead-code dynamic-loading ios

5
推荐指数
0
解决办法
3353
查看次数

动态加载共享库时获取未定义的符号错误

undefined symbol动态加载库时遇到错误.这是我生成此错误的代码段:

int main ()
{

    void *lib_handle = NULL;

    MyClass* (*create)();
    void (*destroy)(MyClass*);
    char *error;


    lib_handle = dlopen ("./libshared.so", RTLD_LAZY);

    if (lib_handle == NULL) 
    {
        fprintf(stderr, "%s\n", dlerror());
        exit(1);

    } 

    create = (MyClass* (*)()) dlsym(lib_handle, "create_object");
    if ((error = dlerror()) != NULL)  
   {
      fprintf(stderr, "%s\n", error);
      exit(1);
   }

    destroy = (void (*)(MyClass*)) dlsym(lib_handle, "destroy_object");

    MyClass *myClass = (MyClass*) create;
    destroy(myClass);   

    dlclose(lib_handle);
}
Run Code Online (Sandbox Code Playgroud)

但是当我通过注释上面的代码并导出库路径来加载库时,一切都像魅力一样.

对于动态链接,我在命令提示符下使用以下命令.

g++ -Wl,--export-dynamic shared_user.cpp -ldl

任何帮助,将不胜感激.

c++ linux shared-libraries dynamic-loading

4
推荐指数
1
解决办法
2万
查看次数

从不同的程序集动态加载类(具有自定义行为)?

我们正在为少数客户构建应用程序,每个客户都有自己的要求以及类似的要求.我们还希望将所有代码保存在同一个应用程序中,而不是将其分支,并且IF不是很好的选择,因为它将遍布所有地方.

我计划为所有人提供基础课程.然后每个客户都有自己的类,其中override方法将执行特殊逻辑.

我们如何在编译时加载程序集而不是这样做

public class BaseClass {
    public string getEventId()
}

public class ClassForJohn:BaseClass {
    [override]
    public string getEventId()
}

public class ClassForAdam:BaseClass {
    [override]
    public string getEventId()
}

void UglyBranchingLogicSomewhere() {
   BaseClass  eventOject;
   if("John"==ConfigurationManager.AppSettings["CustomerName"]){
        eventOject = new ClassForJohn();


   }else if("Adam"==ConfigurationManager.AppSettings["CustomerName"]){
        eventOject = new ClassForAdam();


   }else{
        eventOject = new BaseClass ();

   }
  eventId = eventOject.getEventId();
}
Run Code Online (Sandbox Code Playgroud)

.net c# dynamic-loading

4
推荐指数
1
解决办法
1万
查看次数

C++ 动态加载类:为什么需要“销毁”函数?

这一页检查并给出了如何动态加载和使用类的非常清晰的示例,但有一些我很难理解的内容:

我明白为什么需要“创建”功能,但为什么需要“销毁”功能?为什么没有将接口析构函数声明为纯虚拟函数?

我做了一个相同的例子,除了:

~polygon() = 0;
Run Code Online (Sandbox Code Playgroud)

的析构函数triangle是:

triangle::~triangle() {
    std::cout << "triangle Dtor is called" <<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

然后当我使用时:

delete poly;
Run Code Online (Sandbox Code Playgroud)

该消息确实显示(Linux 下的 GCC 5.4.0)。

我试图寻找其他示例,但它们都提到并使用“销毁”函数,没有使用简单的纯虚拟析构函数的示例,这使我相信我在这里遗漏了一些东西,所以..它是什么?

不想使用销毁函数的背景是我想在 a 中使用分配的对象shared_ptr并且以后不关心它的生命周期,使用“销毁”函数会很棘手,因此我需要知道是否有必要。

c++ memory-management dynamic-loading dlopen

4
推荐指数
1
解决办法
1287
查看次数

为什么JDBC动态加载而不是导入?

在JDBC中,我只看到使用的示例

Class.forName("com.mysql.jdbc.Driver", true, cl);
Run Code Online (Sandbox Code Playgroud)

并没有看到一个使用

import com.mysql.jdbc.Driver;
Run Code Online (Sandbox Code Playgroud)

是因为我们想在执行时动态提供驱动程序包,所以只能在执行时知道吗?

如果我们在执行之前已知有固定的驱动程序包,是否可以采用第二种方式?你会如何比较这两种方式?

谢谢.

java import jdbc dynamic-loading

4
推荐指数
1
解决办法
254
查看次数

Webpack:针对html和js文件不在同一文件夹中的项目,选择output.path,publicPath和chunkFilename选择概念

从webpack文档中output.publicPath

简单规则:HTML页面视图中的output.path的URL。

module.exports = { 
  output: {
    path: path.resolve(__dirname, 'public/assets'),
    publicPath: 'https://cdn.example.com/assets/'   
  } 
}; 
Run Code Online (Sandbox Code Playgroud)

上面的规则对于单页应用程序是实际的,通常index.html与和index.js在同一文件夹中。但是,在多页网站的项目中,通常创建jsscripts创建特殊文件夹。因此,项目输出文件夹的文件结构可能类似于:

在此处输入图片说明

我尝试了很多的组合output.path output.publicPathoutput.chunkFilename,但还是不明白,如何正确选择的上述参数进行动态负载的作品组合(例如const MODULE = import('./loadOnDemand/testModule')chunks/chunk__0.js的输出文件夹中)。请告诉我有关如何选择output.path publicPath和的概念,该概念chunkFilename适用于以上文件系统,也可以在以下文件系统上缩放:

在此处输入图片说明

javascript dynamic-loading webpack webpack-4

4
推荐指数
1
解决办法
399
查看次数