首页 > 系统相关 >IronPython内存释放问题

IronPython内存释放问题

时间:2023-08-14 13:57:24浏览次数:39  
标签:Paths 释放 eng python 内存 var IronPython Runtime

先给出优化后的代码:

var options = new Dictionary<string, object> { ["LightweightScopes"] = true };
ScriptEngine eng = IronPython.Hosting.Python.CreateEngine(AppDomain.CurrentDomain, options);
var scope = eng.CreateScope();
using (var streamOut = new MemoryStream())
{
    ICollection<string> Paths = eng.GetSearchPaths();
    Paths.Add(Environment.CurrentDirectory + @"\Lib");
    Paths.Add(Environment.CurrentDirectory + @"\Lib\site-packages");
    eng.SetSearchPaths(Paths);
    eng.Runtime.IO.SetOutput(streamOut, Encoding.ASCII);
    var pycode="the python code you need execute";//你需要执行的python代码
    eng.Execute(pycode, scope);
    string printS = Encoding.UTF8.GetString(streamOut.ToArray());//python代码执行的print输出结果
    eng.Runtime.Shutdown();
}

注意:

1.GC.Collect()对此处内存回收作用不大。

2.如果通过get的方式获取ScriptEngine ,会造成无法获取python的输出结果(也就是上面代码的printS为空),原因未知。

如:

ScriptEngine eng
{
    get
    {
        var options = new Dictionary<string, object> { ["LightweightScopes"] = true };
        return IronPython.Hosting.Python.CreateEngine(AppDomain.CurrentDomain, options);
    }
}

3.调用eng.Runtime.Shutdown();关闭ScriptEngine的Runtime。

标签:Paths,释放,eng,python,内存,var,IronPython,Runtime
From: https://www.cnblogs.com/yellow3gold/p/17628430.html

相关文章

  • volatility3处理虚拟机内存快照报错
    准备工作python3.7以上https://github.com/volatilityfoundation/volatility3#安装pipinstallvolatility3#使用vol.exe-vvv-ftest-Snapshot1.vmemhashdump-vvv显示详细的报错信息-f指定内存镜像hashdump获取账号密码hash生成Linux下的standalone文件在Li......
  • SSLSocketImpl导致内存飙高
    SSLSocketImpl导致内存飙高问题现象所有服务容器内存都飙高,基本都到98%,但是一直不挂,但是有个节点,是xxljob一直调用的,到达98%以后,xxljob继续调用,就会oom重启,并且内存是缓慢的一直提升。MAT内存快照分析使用MAT,打开hrpof内存快照文件查看OverviewPane就是点击小i点击Leak......
  • ue4游戏逆向之GName内存解析(4.23版本以下)
    ue4游戏中的所有对象名称都保存在GName中,4.23版本以下的GName解析与高版本的不同。4.23版本以下可以通过'FName::GNames()'获取到GName指针,对应的GName指针就是staticTNameEntryArray*Names,利用ue4Dumper时输入的GName就是这个静态指针变量。'TNameEntryArray'类型是通过类模......
  • 《深入理解Java虚拟机》读书笔记:内存分配策略
    Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理,现在我们再一起来探讨一下给对象分配内存的那点事儿。对象的内......
  • C语言中如何进行动态内存分配和释放
    动态内存分配和释放是C语言中非常重要的概念,它允许在程序运行时动态地申请和释放内存空间,提高程序的灵活性和效率。本文将围绕这一主题,详细介绍C语言中如何进行动态内存分配和释放。在C语言中,动态内存分配和释放主要通过malloc()和free()函数实现。malloc()函数用于申请一块指定......
  • 深入理解JavaScript正则表达式:释放其强大力量
    深入理解JavaScript正则表达式:释放其强大力量正则表达式是一种强大的工具,用于在字符串中搜索、匹配和替换特定的模式。在JavaScript中,正则表达式是一种内置的功能,可以帮助开发人员处理各种字符串操作。本文将深入探讨JavaScript正则表达式的原理、语法和应用场景,帮助读者充分理解......
  • 进程地址空间(虚拟内存)
    进程地址空间,进程虚拟内存的管理。某个进程地址空间的全部区域可以以红黑树+链表的形式存放。内核线程没有mm_struct没有进程地址空间,没有相关的内存描述符,这也是内核线程的真实含义--它们没有用户上下文。当一个进程被调度时,该进程的mm域指向的地址空间被装载到内存,PCB中的acti......
  • 内存管理
    内核把物理页作为内存管理的基本单位,内核用一个page结构体表示内核中的每个物理页。Linux把系统的页划分为区,形成不同的内存池,根据用途分配。区只是内核为了管理页而采用的一种逻辑上的分组。一些分配释放相关函数alloc_pages,该函数分配连续的物理页,返回一个指针指向第一个......
  • 内存管理
    内存管理python——内存管理python的内存管理机制:引用计数、垃圾回收,内存池机制接口:gc.disable()#暂停自动垃圾回收.gc.collect()#执行一次完整的垃圾回收,返回垃圾回收所找到无法到达的对象的数量.gc.set_threshold()#设置Python垃圾回收的阈值.gc.set_debug(......
  • 某公司笔试题 - 求int型正整数在内存中存储时1的个数(附python代码)
    #输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。#数据范围:保证在32位整型数字范围内num=int(input("请输入一个正整数:"))#将输入的正整数转化成二进制num_bin=bin(num)print(num_bin)#将二进制字符串转化成数组nbl=list(num_bin)iflen(nbl)>0and......