小编Naz*_*eeh的帖子

如何在托管C++中使用typeof(int)?

我现在正在开发一个项目,其中一部分使用托管C++.在托管C++代码中,我正在创建一个DataTable.在为数据表定义列时,我需要指定列的类型.在C#中,那会:

typeof运算(INT)

但是我如何在托管C++中做到这一点?

谢谢!

c# c++-cli managed

27
推荐指数
1
解决办法
2万
查看次数

.NET DataGridView 控件占用了我大量的内存

我目前在我的应用程序中使用 DataGridView 控件,并且遇到了一个奇怪的内存问题。我根本没有使用数据绑定,只是手动填充。我放在那里的数据根本不是很多。我们通常讨论的数据最多为 20 行 x 20 列。

该控件的工作流程是,我有一个包含不同“数据集”的组合框,当您选择它们​​时我会加载它们。因此,常见的使用场景是循环浏览组合框中的数据集并查看它们在 dataGrid 中呈现。我看到的是,当人们循环浏览数据集时,应用程序内存使用量立即从 100MB 跳到 1100MB,然后在 GC 启动时下降。但是,如果您快速循环浏览数据集(即比 GC 启动速度更快) in),你将耗尽内存并且应用程序将死掉。

经过调试,我发现内存疯狂跳跃的主要原因是我在该数据网格中有一些图像类型的列。我使用它们来显示一个 16x16 图标,指示该行的状态。这些图标存储在 ImageList 中,我只是在填充数据网格的行时将它们设置为该单元格的值。如果我取出图像并用简单的文本替换它们,我绝对不会看到任何内存峰值。

那么这是怎么回事呢?为什么图像,很小的 16x16,会导致控件对我的内存如此疯狂?

更多信息:

我切换数据集时的逻辑是:

  • 清除所有网格行:dataGrid.Rows.Clear();
  • 清除所有列:dataGrid.Columns.Clear();
  • 将列添加到 dataGrid 控件:(大多数类型为字符串,还有一些 DataGridViewImageColumn)
  • 使用 dataGrid.Rows.Add(object[] data); 逐行添加我拥有的数据 (数据包括我需要用作图标的图像)。

c# datagridview

5
推荐指数
1
解决办法
2737
查看次数

C#/ C++互操作 - 需要帮助定义我的数据结构

我正在尝试使用通过C++ DLL提供的功能的C#应用​​程序.我现在有点困难让DLLImport定义正常工作.

这是等式的C++方面:

struct Result
{
    FLOAT   first;
    FLOAT   second;
};

struct ResultData
{
    UINT            uint1;
    UINT            uint2;
    Result          result;
    Result*         pResults;
};

#define DllImport __declspec(dllimport)    
extern "C"
{
    DllImport HRESULT APIENTRY Process(const PCWSTR FileName, const PCWSTR logfileFileName, const PCWSTR DataFileName, ResultData** ppResults);
    DllImport HRESULT APIENTRY Release(ResultData* pResults);
}
Run Code Online (Sandbox Code Playgroud)

在C#方面,这是我到目前为止所做的:

    [StructLayout(LayoutKind.Sequential)]
    public struct Result
    {
        public float first;
        public float second;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct ResultData
    {
        public uint uint1;
        public uint uint2;
        public Result result;
        public Result[] Results;
    } …
Run Code Online (Sandbox Code Playgroud)

c# interop marshalling

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

在x64位操作系统上从"Any CPU"构建的应用程序反映x86程序集

我有一个编译为"任何CPU"的.Net应用程序.我在x64操作系统上运行它,因此它以64位运行.应用程序加载用户提供的其他程序集.它当然使用反射来从用户提供的程序集中读取类型.如果用户程序集编译为"任何CPU",一切正常.但是如果程序集被编译为x86,我会在反射时得到"这不是Win32应用程序"异常.这显然是因为主机应用程序运行64位.

我的问题是,我该如何解决这个问题?有什么想法/想法吗?

谢谢

.net reflection 64-bit 32-bit

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

标签 统计

c# ×3

.net ×1

32-bit ×1

64-bit ×1

c++-cli ×1

datagridview ×1

interop ×1

managed ×1

marshalling ×1

reflection ×1