Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#调用COM无法分配内存_C#_.net_Memory Management_Com - Fatal编程技术网

C#调用COM无法分配内存

C#调用COM无法分配内存,c#,.net,memory-management,com,C#,.net,Memory Management,Com,我在C#应用程序和COM组件分配内存时遇到问题: C程序调用C++编写的COM DLL中的函数,进行矩阵处理。该函数分配了大量内存(8个100MB块中约800MB)。此操作失败(当从C#调用函数时,malloc返回“错误分配”) 如果我从C程序运行相同的函数,分配相同的内存量,那么分配内存就没有问题 我有8GB内存,Win7 x64,还有大量的可用内存 如何解决从C#应用程序调用时分配内存的问题? 我试着用谷歌搜索,但不知道该搜索什么。搜索设置堆大小等,但没有给出任何结果 感觉有点失落!感谢所

我在C#应用程序和COM组件分配内存时遇到问题:

C程序调用C++编写的COM DLL中的函数,进行矩阵处理。该函数分配了大量内存(8个100MB块中约800MB)。此操作失败(当从C#调用函数时,malloc返回“错误分配”)

如果我从C程序运行相同的函数,分配相同的内存量,那么分配内存就没有问题

我有8GB内存,Win7 x64,还有大量的可用内存

如何解决从C#应用程序调用时分配内存的问题? 我试着用谷歌搜索,但不知道该搜索什么。搜索设置堆大小等,但没有给出任何结果

感觉有点失落!感谢所有帮助!

物理内存量(8 GB)不是限制应用程序内存消耗的约束条件。据推测,您构建的32位应用程序的基本限制为4 GB的直接寻址字节。出于历史原因,没有发挥任何作用的应用程序只有这一限制的一半—2 GB。这是您分配的位置,此空间用于其他需要。1由于内存/地址碎片,00 MB的卡盘足够大,可以减少有效可用空间(您不仅需要100个块,还需要连续的块)

这里最简单的解决方案是构建64位应用程序。限制是遥远的

如果仍然需要32位代码:

  • 在宿主应用程序二进制文件上启用,以将限制从2 GB扩展到4 GB
  • 使用,您可以将其与数据一起保存在物理内存中,并根据需要映射到计量地址空间
  • 分配较小的块
物理内存量(8 GB)不是限制应用程序内存消耗的约束条件。据推测,您构建的32位应用程序的基本限制为4 GB的直接寻址字节。出于历史原因,没有发挥任何作用的应用程序只有这一限制的一半—2 GB。这是您分配的位置,此空间用于其他需要。1由于内存/地址碎片,00 MB的卡盘足够大,可以减少有效可用空间(您不仅需要100个块,还需要连续的块)

这里最简单的解决方案是构建64位应用程序。限制是遥远的

如果仍然需要32位代码:

  • 在宿主应用程序二进制文件上启用,以将限制从2 GB扩展到4 GB
  • 使用,您可以将其与数据一起保存在物理内存中,并根据需要映射到计量地址空间
  • 分配较小的块
物理内存量(8 GB)不是限制应用程序内存消耗的约束条件。据推测,您构建的32位应用程序的基本限制为4 GB的直接寻址字节。出于历史原因,没有发挥任何作用的应用程序只有这一限制的一半—2 GB。这是您分配的位置,此空间用于其他需要。1由于内存/地址碎片,00 MB的卡盘足够大,可以减少有效可用空间(您不仅需要100个块,还需要连续的块)

这里最简单的解决方案是构建64位应用程序。限制是遥远的

如果仍然需要32位代码:

  • 在宿主应用程序二进制文件上启用,以将限制从2 GB扩展到4 GB
  • 使用,您可以将其与数据一起保存在物理内存中,并根据需要映射到计量地址空间
  • 分配较小的块
物理内存量(8 GB)不是限制应用程序内存消耗的约束条件。据推测,您构建的32位应用程序的基本限制为4 GB的直接寻址字节。出于历史原因,没有发挥任何作用的应用程序只有这一限制的一半—2 GB。这是您分配的位置,此空间用于其他需要。1由于内存/地址碎片,00 MB的卡盘足够大,可以减少有效可用空间(您不仅需要100个块,还需要连续的块)

这里最简单的解决方案是构建64位应用程序。限制是遥远的

如果仍然需要32位代码:

  • 在宿主应用程序二进制文件上启用,以将限制从2 GB扩展到4 GB
  • 使用,您可以将其与数据一起保存在物理内存中,并根据需要映射到计量地址空间
  • 分配较小的块


但它在32位C应用程序中也能正常工作。为什么它不能在32位C应用程序中工作?结果是一个Excel插件,如果这很重要的话,它是32位的。好吧,32位C应用程序将在第13位而不是第8位。现在发生的是,C应用程序在进程地址空间上有更大的足迹。你是32位C应用程序不是启动CLR实例,该实例单独使用内存来设置初始托管堆并加载所需的库,就像C#应用程序所做的那样。请注意,您的应用程序也必须与Excel共享地址空间,因此您分配的空间要少得多,而且您将不得不接受它,因为您在玩match在这里。您可以使用进程外COM服务器,或者拆分您的加载项,使其在单独的进程中完成其工作(可以是64位,也可以是专用的32位,但空间仍比Excel中大得多)。这当然会使事情变得更复杂,但它仍然是可行的,这也许是我面临这个挑战时应该做的。但它在32位C应用程序中工作得很好。为什么它不能在32位C#中工作?结果是一个Excel插件,而且它是32位的,如果这很重要的话。好的,32位C应用程序会出错在13日而不是8日。正在发生的是C应用程序在进程地址空间上的占用空间更大。您的32位C应用程序没有启动CLR实例