作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在连接的遗留数据库使用数据缓冲区将行传递给应用程序。为了在 C# 中处理这个问题,我编写了一个类,它提供了在缓冲区中读取和写入不同类型的方法。每个数据文件使用一个数据缓冲区,但必须为某些操作调整缓冲区的大小。为此,我添加了一个 Allocate 方法:
public void Allocate(int bytes) {
if (handle != IntPtr.Zero) { // memory has already been allocated
Marshal.FreeHGlobal(handle);
}
handle = Marshal.AllocHGlobal(bytes);
}
不过,那是在我注意到 ReAllocHGlobal 之前。现在我想知道我是否应该这样做:
public void Allocate(int bytes) {
if (handle != IntPtr.Zero) { // memory has already been allocated
handle = Marshal.ReAllocHGlobal(handle, (IntPtr)bytes);
} else { // this is a brand new data buffer
handle = Marshal.AllocHGlobal(bytes);
}
}
我认为第一种方法看起来更简洁,但哪种方法最好用?我的第一个想法是 ReAllocHGlobal 最有意义(因为它专门用于调整现有内存块的大小),但我不是 100% 确定。
最佳答案
如果您不需要保留缓冲区中的信息,释放并分配一个新的缓冲区是更好的选择。如果 ReAlloc 需要在不同的位置分配缓冲区,它将复制现有的内容。
另一方面,如果您想保留缓冲区的内容并扩展(或收缩)它,ReAlloc 是更简单的方法。
关于c# - 我应该使用 ReAllocHGlobal 还是 FreeHGlobal/AllocHGlobal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641564/
我正在连接的遗留数据库使用数据缓冲区将行传递给应用程序。为了在 C# 中处理这个问题,我编写了一个类,它提供了在缓冲区中读取和写入不同类型的方法。每个数据文件使用一个数据缓冲区,但必须为某些操作调整缓
我是一名优秀的程序员,十分优秀!