哪个最适合数据存储结构/类?

2023-12-24

我们在 SO 中看到了很多关于 c# 中的类与结构的讨论。大多以结论说它是一个结束堆/栈内存分配。并建议在中使用结构小数据结构.

现在我面临着在这两个选择中决定简单数据存储的情况。目前,在我们的应用程序中,我们有数千个类,仅充当简单的数据存储(仅公开公共字段),并且它们在不同的模块和服务之间传递。

根据我的理解,出于性能原因,我觉得最好继续使用结构而不是类。因为这些都是简单的数据结构,仅充当数据存储的作用。

在继续之前,我需要经历过这场斗争的人提供一些专家建议。

  • 我的理解正确吗?
  • 我见过大多数 ORM 都有类作为数据存储。所以我怀疑是否应该有理由继续使用类而不是结构。那会是什么?

我会根据以下标准做出选择

  • 引用类型与值类型语义。如果两个对象只有在同一个对象时才相等,则表明引用类型语义 => 类。如果其成员的值定义相等(例如,如果两个 DateTimes 都表示相同的时间点,即使它们是 2 个不同的对象,则它们是相等的),则值类型语义 => struct
  • 对象的内存占用。如果对象很大并且经常分配,使其成为结构会更快地消耗堆栈,因此我宁愿将其作为一个类。相反,我宁愿避免小值类型的 GC 惩罚;因此使它们成为一个结构。
  • 你能让对象不可变吗?我发现结构非常适合“值对象”——来自 DDD 书。
  • 你会因为这个对象的使用而面临一些装箱-拆箱惩罚吗?如果是,那就去上课吧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪个最适合数据存储结构/类? 的相关文章

  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • 什么是具有副作用的表达式?为什么不应将它们传递给宏?

    我在 C 如何编程 一书中看到这样一句话 具有副作用 即变量值被修改 的表达式不应传递给宏 因为宏参数可能会被多次求值 我的问题是什么是具有副作用的表达式以及为什么不应将它们传递给宏 经典的例子是计算两个值的最大值的宏 define MAX
  • 通过指向基址的指针删除对象而不使用虚拟析构函数

    我有代码 class A1 public A1 cout lt lt A1 virtual A1 cout lt lt A1 class A2 public A2 cout lt lt A2 A2 cout lt lt A2 class B
  • 是否可以将 long long 返回值分配给 int64_t 而不会丢失 64 位机器中的精度?

    我已经实现了以下代码 include
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • MPI_Gather 分段错误

    我有这个并行高斯消除代码 调用以下任一方法时会发生分段错误MPI Gather函数调用 我知道如果没有为任一缓冲区正确分配内存 可能会出现此类错误 但我看不出内存管理代码有什么问题 有人可以帮忙吗 Thanks Notes 该程序从一个 t
  • 是否可以将 CMFCToolBar 添加到对话框中?

    我刚刚尝试了将 CToolbar 添加到新 CMFCToolBar 上的对话框的标准方法 但这不起作用 在我深入研究新的实现之前 我想知道它是否真的可行 我不确定你所说的 标准方式 是什么意思 但你当然可以以编程方式做到这一点 In MyD
  • 如何在提升日期时间中忽略周末和节假日?

    第一个问题 我有一个提升日期对象 如下所示 boost gregorian date 今天 2012 02 13 我从今天减去日期部分 如下所示 今天 月 240 或今天 天 X 等 我想在进行上述减法时是否有办法排除周末和特殊假期 我的意
  • 以编程方式打开网页并以字符串形式检索其 html 包含内容

    我有一个 Facebook 帐户 我想提取我朋友的照片及其个人详细信息 例如 出生日期 就读学校 等 我能够提取我每个朋友帐户的 Facebook 首页的地址 但我不知道如何以编程方式打开我每个朋友首页的网页并将 html 包含保存为字符串
  • if(pointerVar) 与 if(pointerVar!=NULL) 相同吗?

    简单的问题 Is if pointerVar 与if pointerVar NULL 也是if pointerVar 与if pointerVar NULL 给我你在技术上最正确 迂腐的答案 这两种说法看起来和操作起来都是一样的 前者有什么
  • 黑屏只是闪烁一会儿

    在我的 Windows Phone 8 应用程序中 我有一个搜索页面 其中有一个文本框供用户输入搜索关键字 输入默认SIP键盘的 Enter 键时将调用搜索 搜索结果显示在另一个页面中 为了在导航到结果页面之前隐藏键盘 我使用 this F
  • 无法在 Visual Studio Code 的 C# 输出上键入任何内容

    所以我试图在 vscode 上运行一个非常基本的 C 程序 代码如下 using System namespace HelloWorld class Program static void Main string args string N
  • Web Api 2 在 OWIN 中间件中获取控制器和操作名称?

    如何在自定义 OWIN 中间件中检索 api 控制器名称和 api 操作名称 我可以在消息处理程序内部执行此操作 如下所示 var config request GetConfiguration var routeData config R
  • 如何收集和存储tellp()、tellg()返回类型?

    我正在编写一个在文件中维护 linked list 的程序 因此 我通过使用tellp tellg 遍历文件并将其添加到特定的长整数 可以视为偏移量 以到达新位置 一个简单的例子是 long next offset sizeof long
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 是否可以在 ASP.NET Web API 和 SPA 中使用基于 cookie 的身份验证?

    我想创建基于 angularjs 前端和 ASP NET Web API 的 Web 应用程序 我需要创建安全 api 但我无法在将实施此 Web 应用程序的公司服务器上使用基于令牌的身份验证 是否可以对 SPA 和 ASP NET Web
  • Windows 中的蓝牙 AVRCP 命令会触发哪些事件

    可以这么说 只是在做一些高级侦察 对于我的潘多拉客户 Elpis http elpis adamhaile net 我支持全局媒体键 键盘上的 MediaPlayPause MediaNext 等 并且我希望能够支持AVRCP http e
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们
  • C++ 中带逗号的表达式的执行顺序 [重复]

    这个问题在这里已经有答案了 我的理解是这个词j i将在之前执行 i在声明中 j i i C 标准是否保证j i将在之前执行 i在循环 for auto i std next begin j begin i end j i i 逗号运算符引入

随机推荐

  • UIKeyboardTypeNamePhonePad - 显示选项

    我需要使用名称电话键盘类型 UIKeyboardTypeNamePhonePad 但在选择文本字段时首先显示数字键盘 我需要输入数据 例如 123 第657章 450b 123a 我总是需要先输入一个数字 但有时最后需要输入 A B 您可以
  • Android SQLite - 为什么我的数据库每次都重新创建?

    我试图更好地理解 SQLiteOpenHelper 类以及 onCreate 和 onUpgrade 的调用方式和时间 我的问题是 每次我退出并启动我的应用程序 从技术上讲 实际上是每次我创建 MyDB 的新实例时 都会调用 onCreat
  • 如何比较字符串和const char*?

    include
  • 使用 jest.run() 或 jest.runCLI() 运行所有测试或以编程方式运行 jest 的方法

    我该如何使用jest run or jest runCLI 以编程方式运行所有测试 我应该用什么作为论据 我试图找到有关它们的文档但失败了 如果上述函数不起作用 如果我想以编程方式运行 jest 我应该调用什么 Jest 不应该以编程方式运
  • 在正在进行的通话中播放音频剪辑

    是否可以通过在通话期间叠加音轨来修改当前通话 我查找了 SDK 但在文档中找不到任何 API 来执行此操作 我正在尝试研究在正在进行的通话中播放先前录制的通话 音频剪辑的可行性 是否可以通过在通话期间叠加音轨来修改当前通话 不 抱歉 没有
  • 将 IBM 移动应用程序构建器连接到 Cloudant JSON 数据 - bluemix-mobile-services

    我正在使用 IBM Bluemix Mobile App Builder 工具 并了解它目前处于实验阶段 但在将该工具连接到现有 JSON 数据源时遇到问题 我尝试连接到 Bluemix 中的 Cloudant 实例 但找不到将 App B
  • 在数组、列表中查找异常值

    我有数组形式的销售统计数据 可以根据该数据计算标准差或平均值 stats 100 98 102 100 108 23 120 假设 20 的差异是正常情况 23显然是一个特例 找到这个不寻常值的最佳算法是什么 在任何语言 伪或任何原理中 你
  • 跨单页视图翻转和多页翻转维护应用程序状态

    嗯 随着技术的进步 我们很久以前解决的问题再次出现 回到黑暗时代 当 PHP 和 ASP 被认为很棒时 我们总是遇到视图状态的问题 如果您有一个页面 上面有十几个选择组合框 您的用户选择一些组合并点击下一步 然后意识到他们搞砸了并点击浏览器
  • 为什么 FileInputStream read() 方法在进入无限循环时错误地读取问号(ascii: 63)?

    网站上有一些类似的问题 但都在不同的场景中使用过 所以 我在这里问 package Assign6B import java io FileInputStream import java io FileOutputStream import
  • Julia:文档字符串和 LaTeX

    朱莉娅有docstrings功能 记录在此处https docs julialang org en stable manual documentation https docs julialang org en stable manual
  • 动态地将事件处理程序添加到 React.DOM 元素

    我正在使用 RadioButtonGroup 组件 它类似于无线电输入但带有按钮 如果使用该组件像这样简单就好了 var SelectThing React createClass render function render I woul
  • 使用 RedBean PHP 清空或截断表?

    我使用 RedBean PHP 进行测试 我非常喜欢它 但是我不知道如何截断表 我可以获取所有豆子并删除它们 但这看起来很麻烦 在 RedBean 1 3 中 您可以使用 R wipe type 来截断表
  • 在函数内部定义全局变量

    像python一样可以在函数内定义全局变量吗 例如 在Python中 def testFunc global testVar testVar 1 有没有办法在函数内的 javascript 中定义 testvar 全局 简单地忽略var关键
  • 在 Imagemagick 中创建空白图像

    如何通过命令行在 Imagemagick 中创建空白的新图像 Using background不起作用 convert size 800x800 background white x png convert no images define
  • Seaborn 头衔位置

    我的图表标题的位置在这方面很糟糕jointplot 我试过移动loc left right and center但它不会从它所在的位置移动 我也尝试过类似的方法ax title set position 3 15 基于该网站的其他建议 但这
  • 为什么 qsort 中的排序方法改变了我的数组?

    https phaxis org 2012 07 12 get sorted index orderting of an array https phoxis org 2012 07 12 get sorted index ordertin
  • 使用 Spring 解码主体参数

    我正在使用 Spring 为 Slack 应用程序开发 REST API 后端 我能够从 Slack 接收消息 斜线命令 但无法正确接收组件交互 按钮单击 The 官方文档 https api slack com docs message
  • 批量回显 URL

    编辑 变量没有正确定义 我不知道为什么 但我找到了解决方法 只需要 6 页 我创建了第 7 页 它将立即返回到第 1 页 因此不再需要 HTMLNxtpg 变量 我正在尝试创建一个批处理文件 它将生成一个 HTML 文件 这样用户就不需要任
  • 寻找干净的 C# WinForms MVC 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何创建丰富的用户界面 Windows 应用程序 例如 Photo Shop 我正在寻找使用 C 的 WinForms 的干净 MVC 教
  • 哪个最适合数据存储结构/类?

    我们在 SO 中看到了很多关于 c 中的类与结构的讨论 大多以结论说它是一个结束堆 栈内存分配 并建议在中使用结构小数据结构 现在我面临着在这两个选择中决定简单数据存储的情况 目前 在我们的应用程序中 我们有数千个类 仅充当简单的数据存储