标签: managed

反序列化字节数组

如果我想从二进制文件填充结构,我会使用这样的东西:

using (BinaryReader br = new BinaryReader(File.Open(filename, FileMode.Open)))
{
    myStruct.ID = br.ReadSingle();
    myStruct.name = br.ReadBytes(20);
}
Run Code Online (Sandbox Code Playgroud)

但是,我必须在反序列化之前将整个文件读入一个字节数组,因为我想做一些预处理.是否有任何托管方式从字节数组填充我的结构,最好类似于上面的那个?

c# binary managed deserialization

13
推荐指数
1
解决办法
3万
查看次数

managed-schema和schema.xml之间有什么区别

我在solr 6中有以下问题.

  1. managed-schema和schema.xml之间的主要区别是什么
  2. 使用managed-schema和schema.xml(经典)时有什么好处和坏处.

你能帮我理解solr6中推荐的内容吗?

问候,

Shaffic

schema solr managed

13
推荐指数
2
解决办法
5996
查看次数

管理语言的Judy数组

Judy数组是快速数据结构,可以表示稀疏数组或一组值.是否有针对C#等托管语言的实现?谢谢

c# arrays managed data-structures

11
推荐指数
2
解决办法
3527
查看次数

我应该为我的应用程序使用Managed C++或C#吗?

如果您必须在C#和托管C++之间做出决定,您会选择哪个以及为什么?

托管C++相对于C#有什么好处?你更喜欢哪种语言?在什么情况下你会做出什么决定?

.net c# managed-c++ c++-cli managed

11
推荐指数
2
解决办法
3955
查看次数

托管与非托管类型

我正在阅读一篇关于如何sizeof在 C# 中使用运算符的文章

他们说:“用于获取非托管类型的大小(以字节为单位)。”

我知道托管和非托管代码之间的区别。但我的理解是,我用 C# 编写的所有代码(包括所有预定义和用户定义类型)都由 CLR 管理。那么他们所说的“非托管类型”是什么意思?

c# unmanaged managed sizeof

11
推荐指数
1
解决办法
1808
查看次数

什么是un /托管DLL?什么是非托管代码?

有人可以向我解释一下un/managed DLL是什么?什么是un /托管代码?

dll unmanaged managed

10
推荐指数
4
解决办法
1万
查看次数

如何通过引用发送字符串来修改该字符串的非托管C库?

我是与非托管库交互的新手.我有一个非托管的C函数,它通过函数内的引用修改字符串.我在从C#传递字符串并通过C函数修改它时遇到了麻烦.

这是C函数:

__declspec(dllexport) void __stdcall Test(char* name)
{
    *name = "Bar";
}
Run Code Online (Sandbox Code Playgroud)

这是C#DLL导入代码:

[DllImport(@"C:/blah/mylibrary.dll")]
public extern static string Test(string name);
Run Code Online (Sandbox Code Playgroud)

这是我用来调用函数的代码:

string s = "foo";
Test(s);
//I want s to be "Bar" after the above line
Run Code Online (Sandbox Code Playgroud)

我尝试在字符串参数上使用"ref"和"out",并尝试将编组作为LPStr.根据我的尝试,我得到一个错误

"作为String传入的指针不能位于进程地址空间的底部64K."

要么

"试图读取或写入受保护的内存.这通常表明其他内存已损坏."

我确定我只是用我的指针做一些愚蠢的事情.有人可以帮我确定合适的C#代码,使"s"等于"bar"吗?

谢谢

c c# unmanaged managed

10
推荐指数
1
解决办法
6788
查看次数

C++/CLI中的值类

在C++/CLI中使用值类有什么好处.值类包含成员函数吗?

c++ c++-cli managed

10
推荐指数
1
解决办法
6344
查看次数

C++在本机代码中声明托管变量

我有一个.NET表单,以及我的Visual Studio中的本机代码.问题是:我不能在我的本机代码中声明我的.NET表单的全局实例,如下所示:

Editor^ maineditor;
Run Code Online (Sandbox Code Playgroud)

它给了我这个问题:

error C3145: 'EditorEntry' : global or static variable may not have managed type 'Cube3D::Editor ^'
Run Code Online (Sandbox Code Playgroud)

variables global native managed visual-c++

10
推荐指数
2
解决办法
9696
查看次数

在托管环境中划分内存

我正在用C#进行流体模拟.每个循环我需要计算空间中离散点处流体的速度.作为计算的一部分,我需要几十千字节的空间来容纳一些double []数组(数组的确切大小取决于一些输入数据).数组仅在使用它们的方法的持续时间内需要,并且有一些不同的方法需要这样的临时空间.

在我看来,有一些不同的解决方案来构建临时数组:

  1. 每次调用方法时,使用'new'从堆中获取内存.这就是我最初做的事情,但是它给垃圾收集器带来了很大的压力,而每秒一到两次的几毫秒尖峰真的很烦人.

  2. 在调用方法时将临时数组作为参数传递.问题是,这迫使用户管理它们,包括适当地调整它们,这是一个巨大的痛苦.并且它使得使用或多或少的临时存储器变得困难,因为它改变了API.

  3. 在不安全的上下文中使用stackalloc从程序堆栈中分配临时内存.这可以正常工作,除了我需要使用/ unsafe进行编译并在我的代码中不断地散布不安全的块,我想避免.

  4. 程序启动时预先分配私有数组.这很好,除非我不一定知道我需要的数组的大小,直到我可以查看一些输入数据.它变得非常混乱,因为你不能将这些私有变量的范围限制为单一方法,因此它们不断地污染命名空间.并且随着需要暂存内存的方法数量的增加,它的扩展性很差,因为我分配的内存很多,只占用了一小部分时间.

  5. 创建某种中央池,并从池中分配临时内存阵列.这个问题的主要问题是我没有看到从中央池分配动态大小的数组的简单方法.我可以使用起始偏移和长度,并且所有临时内存基本上共享一个大型数组,但我有很多现有的代码假定double [] s.而且我必须小心使这样的池线程安全.

...

有没有人有类似问题的经验?从经验中提供的任何建议/课程?

c# memory-management managed

10
推荐指数
2
解决办法
378
查看次数