问题标签 [unmanaged-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在 C# 中有效使用指向任意内存位置的原始指针
在下面的代码中,我构建了一个指向位于任意内存位置的结构的指针:
如果我将f4
's type 更改为object
而不是int
,则会收到错误Compiler Error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('type')。
允许在(不仅仅是)级别struct S
上在该类型上构建指针的约束是什么?CIL
C#
MSDN 上的这个页面说sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
, float
, double
, decimal
, bool
, 枚举和指针是允许的,以及“仅包含非托管类型字段的用户定义的结构类型”,但没有指定什么是非托管类型是。
c# - 这个 IntPtr 是否指向分配的非托管内存?
首先,我分配内存并获取指针:
然后,我尝试释放指针指向的内存:
但在我的应用程序中,它有时会引发一个致命的未知异常,仅此解释:“内存片段已损坏”。我想这是因为我试图通过释放另一个指针来释放一个指向已经释放的内存块的指针......
我的问题是:使用 IntPtr 指针,有没有办法检查内存块是否仍然被分配或已经被释放?
c# - Read and write directly to Unlocked Bitmap unmanaged memory (Scan0)
Is that ok to Write and Read directly from a unlocked Bitmap unmanaged memory?
Can I keep using the BitmapData after I UnlockBits of the Bitmap? I did a test app where I can read the pixel of the Bitmap of a PictureBox at mouse position while another thread is writing pixels to the same Bitmap.
EDIT 1: As Boing
have pointed out in his answer: "Scan0 does not point to the actual pixel data of the Bitmap object; rather, it points to a temporary buffer that represents a portion of the pixel data in the Bitmap object." from MSDN.
But once I get the Scan0, I'm able to read/write to the Bitmap without the need of Lockbits or UnlockBits! I'm doing this a lot of times in a thread. Accordingly to MSDN, it should not happen, because Scan0 points to a COPY of the Bitmap data! Well, in C# all the test shows that it is not a copy. In C++ I don't know if it works as it should.
EDIT 2: Using the rotate method some times makes the OS to free the Bitmap pixel data copy. Conclusion, it is not safe to read/write an unlocked Bitmap Scan0
. Thanks Boing for your answer and comments!
Below is how I get the BitmapData and read and write the pixel value.
c# - 如何正确释放指向非托管数组的 IntPtr?
我分配 IntPtr 指向要与非托管代码一起使用的结构数组。我在这个主题上找到了很多资源,这是我的最终方法(似乎效果很好):
现在我的问题:
- 如何正确释放这个导致的 IntPtr 指针?(一个 FreeHGlobal(指针)就足够了吗?)
- 如果我使用 x86 或 x64 系统/应用程序平台,是否需要采取任何预防措施?
字符串数组(C 中的 char**)的相同问题:
c# - 如何将字符串数组复制到非托管 char 双指针中?
我有char**
一个 C 结构,它在 C 代码中分配为Nx128矩阵。在 C# 中,我有一个字符串数组,我想将此数组复制到 char 双指针,而不重新分配任何内容。我试过这个:
但这不起作用。有人知道如何进行这样的复制吗?
更新:
以下是 mychar** names
在 C 代码中分配 3 个项目的方式:names = (char **) MallocArray2D (3, 128, sizeof ( char ));
以下是该MallocArray2D
方法的详细信息:
此MallocArray2D
方法被调用到MallocImage
我的 C# 代码中公开的 a 中。
这是MallocImage
C 代码中有趣的方法部分:
现在我的 C# 公开MallocImage
方法:
.net - 将 UnmanagedMemoryStream 转换为字节数组
就这么简单,我如何在VBNET 中将UnmanagedMemoryStream转换为Byte-Array?:
例外:
c# - C# 中的字节 * 数组
我正在尝试调用非托管函数。我从 C++ 中调用它:这是与我一起工作的测试项目
但是当我在 C# 中调用它时:
我只得到第一个字节
c# - 从 C# 应用程序执行 C++ 函数
我有一个用 C++ 编写的 DLL,它是 C# 围绕 LZO 库的包装器。但出于测试目的,我想知道是否可以转换类型,所以我创建了一个测试函数,它接受文件的内容和大小并写入它的副本。
这是代码的图像,为了更好的可读性:http: //i.epvpimg.com/u4mgh.png
然后我像这样导入它:
并这样称呼它:
问题不在 ReadFile 函数中,我检查了它。我从另一个文件创建了一个副本,并用校验和检查了两者。
所以,我的问题是:我应该如何将 byte[] 转换为 lzo_uint8* (unsigned char*)?
asp.net - 为什么(以及如何)将 ASP.NET 缓存存储在非托管内存中?
好的,各位 ASP.NET 专家:我已经使用反射器来研究 ASP.NET 缓存实现(位于HttpRuntime.Cache
和上HttpContext.Current.Cache
)在内部使用 aHashtable
来保留缓存。
但是,数据存储在非托管内存中。这很奇怪,因为我看不到任何数据存储在非托管内存中。但是,编写一个非常简单的 Web 应用程序,将一大块字节数组插入缓存,我们可以看到:
- 私有字节:460MB
- 所有堆中的字节数:150MB
=>
托管内存:150 MB
非托管内存:310 MB
所以基本上我多次调用应用程序(每次增加是 1000x 请求,每个请求将 64KB 空缓冲区字节 []放入缓存)。所以增长最多的是私有字节(总内存)而不是所有堆中的字节(托管内存)。但是,由于我使用 Hashtable 将对象添加到托管堆,因此我期望托管内存会随着总内存的增长而增长。
你能解释一下这种行为吗?
更新
正如西蒙所说,所有堆值中的字节仅在垃圾收集后发生变化 - 我更改了代码以诱导垃圾收集并更新计数器。第 2 代堆内存的增加与添加的内存量完全相同。但是,非托管内存仍然高得多。在此示例中,堆 2 仅为 96MB,而总内存为 231 MB。
wpf - 在 WPF 中呈现非托管视频帧的最高效方法是什么?
我正在使用 FFmpeg 库通过 UDP 以最小的延迟接收和解码 H.264/MPEG-TS(这是 MediaElement 无法处理的)。
在一个专用的 FFmpeg 线程上,我正在拉取 PixelFormats.Bgr32 视频帧进行显示。我已经尝试过 InteropBitmap:
然后每帧更新:
但是性能很差(跳帧、高 CPU 使用率等)。
我也尝试过 WriteableBitmap: FFmpeg 将帧放入 _writeableBitmap.BackBuffer 并按帧更新:
遇到几乎相同的性能问题(使用各种 DispatcherPriority 进行测试)。
任何帮助将不胜感激。