引发类型为“System.OutOfMemoryException”的异常。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引发类型为“System.OutOfMemoryException”的异常。相关的知识,希望对你有一定的参考价值。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

[OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。]
System.Data.SqlTypes.SqlBinary.get_Value() +31
System.Data.SqlClient.SqlDataReader.GetBytesInternal(Int32 i, Int64 dataIndex, Byte[] buffer, Int32 bufferIndex, Int32 length) +1543
System.Data.SqlClient.SqlDataReader.GetBytes(Int32 i, Int64 dataIndex, Byte[] buffer, Int32 bufferIndex, Int32 length) +170
LangChao.ECGAP.InPortal.business.FujianDownLoad.Page_Load(Object sender, EventArgs e) +1085
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

你sql取的数据量太大了 超出内存的空间 所以报了这个错
优化sql查询 不要一次取这么多 如果真的需要这么多数据 建议采用分页
也就是分段取
参考技术A 内存溢出了,lz好好看看是不是new对象太多了。 参考技术B C#访问oracle 数据库提示连接打开,可以查询到表,出现这个提醒,用分页展示即可! 参考技术C 表示看不懂,内存不足,有许多异常原因,做什么功能?

在 python 中使用 cppyy 时,指针变量引发错误为未知类型

【中文标题】在 python 中使用 cppyy 时,指针变量引发错误为未知类型【英文标题】:Pointer Variable raise error as unknown type when using cppyy in python 【发布时间】:2020-10-11 13:12:48 【问题描述】:

所以我有这个sdk,这是documentation,它在c++中,所以我安装了cppyy,但是当我在python中包含带有cppyy的头文件时,它会引发错误

    // MysticLight_SDK.h : header file
//

#pragma once

typedef int (*LPMLAPI_Initialize)();
typedef int (*LPMLAPI_GetDeviceInfo)(SAFEARRAY** pDevType, SAFEARRAY** pLedCount);
typedef int (*LPMLAPI_GetDeviceName)(BSTR type, SAFEARRAY** pDevName);
typedef int (*LPMLAPI_GetDeviceNameEx)(BSTR type, DWORD index, BSTR* pDevName);
typedef int (*LPMLAPI_GetErrorMessage)(int ErrorCode, BSTR* pDesc);
typedef int (*LPMLAPI_GetLedName)(BSTR type, SAFEARRAY** pLedName);
typedef int (*LPMLAPI_GetLedInfo)(BSTR type, DWORD index, BSTR* pName, SAFEARRAY** pLedStyles);
typedef int (*LPMLAPI_GetLedColor)(BSTR type, DWORD index, DWORD* R, DWORD* G, DWORD* B);
typedef int (*LPMLAPI_GetLedStyle)(BSTR type, DWORD index, BSTR* style);
typedef int (*LPMLAPI_GetLedMaxBright)(BSTR type, DWORD index, DWORD* maxLevel);
typedef int (*LPMLAPI_GetLedBright)(BSTR type, DWORD index, DWORD* currentLevel);
typedef int (*LPMLAPI_GetLedMaxSpeed)(BSTR type, DWORD index, DWORD* maxLevel);
typedef int (*LPMLAPI_GetLedSpeed)(BSTR type, DWORD index, DWORD* currentLevel);
typedef int (*LPMLAPI_SetLedColor)(BSTR type, DWORD index, DWORD R, DWORD G, DWORD B);
typedef int (*LPMLAPI_SetLedColors)(BSTR type, DWORD AreaIndex, SAFEARRAY** pLedName, DWORD* R, DWORD* G, DWORD* B);
typedef int (*LPMLAPI_SetLedColorEx)(BSTR type, DWORD AreaIndex, BSTR pLedName, DWORD R, DWORD G, DWORD B, DWORD );
typedef int (*LPMLAPI_SetLedColorSync)(BSTR type, DWORD AreaIndex, BSTR pLedName, DWORD R, DWORD G, DWORD B, DWORD );
typedef int (*LPMLAPI_SetLedStyle)(BSTR type, DWORD index, BSTR style);
typedef int (*LPMLAPI_SetLedBright)(BSTR type, DWORD index, DWORD level);
typedef int (*LPMLAPI_SetLedSpeed)(BSTR type, DWORD index, DWORD level);

错误

    Traceback (most recent call last):
  File ".\check.py", line 5, in <module>
    cppyy.include('MysticLight_SDK.h')
  File "C:\Users\sarfaraz\AppData\Local\Programs\Python\Python37\lib\site-packages\cppyy\__init__.py", line 217, in include
    raise ImportError('Failed to load header file "%s"%s' % (header, err.err))
ImportError: Failed to load header file "MysticLight_SDK.h"
In file included from input_line_18:1:
./MysticLight_SDK.h:7:38: error: unknown type name 'SAFEARRAY'
typedef int (*LPMLAPI_GetDeviceInfo)(SAFEARRAY** pDevType, SAFEARRAY** pLedCount);
                                     ^
./MysticLight_SDK.h:7:60: error: unknown type name 'SAFEARRAY'
typedef int (*LPMLAPI_GetDeviceInfo)(SAFEARRAY** pDevType, SAFEARRAY** pLedCount);
                                                           ^
./MysticLight_SDK.h:8:38: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetDeviceName)(BSTR type, SAFEARRAY** pDevName);
                                     ^
./MysticLight_SDK.h:8:49: error: unknown type name 'SAFEARRAY'
typedef int (*LPMLAPI_GetDeviceName)(BSTR type, SAFEARRAY** pDevName);
                                                ^
./MysticLight_SDK.h:9:40: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetDeviceNameEx)(BSTR type, DWORD index, BSTR* pDevName);
                                       ^
./MysticLight_SDK.h:9:64: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetDeviceNameEx)(BSTR type, DWORD index, BSTR* pDevName);
                                                               ^
./MysticLight_SDK.h:10:55: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetErrorMessage)(int ErrorCode, BSTR* pDesc);
                                                      ^
./MysticLight_SDK.h:11:35: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedName)(BSTR type, SAFEARRAY** pLedName);
                                  ^
./MysticLight_SDK.h:11:46: error: unknown type name 'SAFEARRAY'
typedef int (*LPMLAPI_GetLedName)(BSTR type, SAFEARRAY** pLedName);
                                             ^
./MysticLight_SDK.h:12:35: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedInfo)(BSTR type, DWORD index, BSTR* pName, SAFEARRAY** pLedStyles);
                                  ^
./MysticLight_SDK.h:12:59: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedInfo)(BSTR type, DWORD index, BSTR* pName, SAFEARRAY** pLedStyles);
                                                          ^
./MysticLight_SDK.h:12:72: error: unknown type name 'SAFEARRAY'
typedef int (*LPMLAPI_GetLedInfo)(BSTR type, DWORD index, BSTR* pName, SAFEARRAY** pLedStyles);
                                                                       ^
./MysticLight_SDK.h:13:36: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedColor)(BSTR type, DWORD index, DWORD* R, DWORD* G, DWORD* B);
                                   ^
./MysticLight_SDK.h:14:36: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedStyle)(BSTR type, DWORD index, BSTR* style);
                                   ^
./MysticLight_SDK.h:14:60: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedStyle)(BSTR type, DWORD index, BSTR* style);
                                                           ^
./MysticLight_SDK.h:15:40: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedMaxBright)(BSTR type, DWORD index, DWORD* maxLevel);
                                       ^
./MysticLight_SDK.h:16:37: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedBright)(BSTR type, DWORD index, DWORD* currentLevel);
                                    ^
./MysticLight_SDK.h:17:39: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedMaxSpeed)(BSTR type, DWORD index, DWORD* maxLevel);
                                      ^
./MysticLight_SDK.h:18:36: error: unknown type name 'BSTR'
typedef int (*LPMLAPI_GetLedSpeed)(BSTR type, DWORD index, DWORD* currentLevel);
                                   ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]

cppyy 工作正常,我在没有标头的情况下对其进行了测试,并且没有错误

编写代码来检查这个的实现

import cppyy
cppyy.include('MysticLight_SDK.h')

cppyy.cppdef("""
int main() 
    int c;
    int a = 10;
    int b = 10;
    c = a+b;
    return c;
    
;""")

c = cppyy.gbl.main

print(c())

提前致谢

【问题讨论】:

【参考方案1】:

看起来SAFEARRAY 位于oaidl.h 中,这需要在MysticLight_SDK.h 之前包含(以及在C++ 中使用MysticLight_SDK.h 时通常包含的任何其他标头)。

cppyy 以预编译头文件的形式引入标准 C++ 头文件,但任何其他平台和项目头文件都需要显式包含,或者需要打包到单独的字典 (https://cppyy.readthedocs.io/en/latest/utilities.html#dictionaries) 中以允许自动加载。

更准确地说,使用上面链接的 .zip 文件,如下:

import cppyy
cppyy.include("oaidl.h")                  # <-- this is the one
cppyy.include("MysticLight_SDK.h")
cppyy.load_library("MysticLight_SDK_x64")

为我工作。

除此之外,我不知道会是什么用例,因为 MysticLight_SDK.h 标头仅包含函数指针的 typedef,没有实际的 API。

【讨论】:

'''rootcling -f myclass_rflx.cxx MysticLight_SDK.h''' 在我的命令行上执行此操作,但得到与上面相同的错误 ''' 在 input_line_9:27 包含的文件中:./MysticLight_SDK .h:7:38: error: unknown type name 'SAFEARRAY' typedef int (LPMLAPI_GetDeviceInfo)(SAFEARRAY* pDevType, SAFEARRAY** pLedCount);''' 我是这种东西的新手你看起来像是能在这方面帮助我的人。请你好心指导我完成这件事。谢谢 OOOMMMMMGGGG 你是 CPPYY 的作者。能在你面前感到很幸运。我从没想过像你这样的大人物也使用***,你能不能指导我完成这个 我知道你可能没有太多空闲时间,但我希望你能回答这个问题,所以我会给出一个更好的描述,sdk 文件夹有 3 个文件 1 个头文件和 2 个 Dll 文件,我是有兴趣调用这些函数并获取它们将返回的值并使用新值从此头文件执行某些函数。 对于字典,我的意思是包装oaidl.h,以便可以自动找到它。要将MysticLight_SDK.h 打包到字典中,需要以与交互式提示相同的方式包含oaidl.h。我已经用一个基本的代码示例更新了上面的答案,但是我真的不明白如何使用 SDK 标头,因为它不包含任何 API,所以它必须有更多的东西。

以上是关于引发类型为“System.OutOfMemoryException”的异常。的主要内容,如果未能解决你的问题,请参考以下文章

引发类型为“System.OutOfMemoryException”的异常。

super() 为新型类引发“TypeError:必须是类型,而不是 classobj”

在 python 中使用 cppyy 时,指针变量引发错误为未知类型

引发类型为“System.OutOfMemoryException”的异常.是啥错误

引发类型为“System.OutOfMemoryException”的异常。

类型初始值设定项引发异常