[英]How many DataTable objects should I use in my C# app?
我是一位经验丰富的程序员,使用传统(但面向对象)开发工具并切换到 C#/.Net。 我正在使用 SQL Server CE 3.5 编写一个小型单用户应用程序。 我已经阅读了概念数据集和相关文档,我的代码有效。
现在我想确保我做的是“正确的”,从有经验的 .Net/SQL Server 编码人员那里得到一些反馈,那种你从阅读文档中得不到的反馈。
我注意到我在几个地方有这样的代码:
var myTableDataTable = new MyDataSet.MyTableDataTable();
myTableTableAdapter.Fill(MyTableDataTable);
... // other code
在单用户应用程序中,您是否通常只在应用程序启动时执行一次,为每个表实例化一个 DataTable 对象,然后存储对它的引用,以便您只使用已填充数据的单个对象? 这样你就只能从数据库中读取数据一次而不是多次。 或者这个开销太小以至于无关紧要(加上大表可能会适得其反)?
对于 CE,这可能不是问题。 如果您将此应用程序推送给数千名用户,而他们都在访问集中式数据库,您可能需要花一些时间进行优化。 在像 CE 这样的单用户实例数据库中,除非您有数据表明需要优化,否则我不会花任何时间担心它。 过早优化等
决定的方式在 2 个主要的几件事之间有所不同 1. 数据是否会被不断访问 2. 是否有大量数据
如果您经常使用表中的数据,则在第一次使用时加载它们。 如果只是偶尔使用数据,需要的时候填表,然后丢弃。
例如,如果您有 10 个 gui 屏幕并且仅在其中 1 个屏幕上使用 myTableDataTable,则仅在该屏幕上读取它。
选择实际上并不取决于 C# 本身。 它归结为以下之间的平衡:
作为一般规则:对于数据不经常更改的生产应用程序,我可能会创建一次 DataTable,然后像您提到的那样保留引用。 我还会考虑将数据放在类型化集合/列表/字典中,而不是通用 DataTable 类中,因为这样更容易让编译器发现我的输入错误。
对于您自己运行的一个简单实用程序,它“开始、完成任务并结束”,这可能不值得付出努力。
您正在询问 Windows CE。 在这种特殊情况下,我很可能只执行一次查询并保留结果。 移动操作系统在电池和空间方面具有桌面软件所没有的额外限制。 基本上,移动操作系统使第 4 项要点变得更加重要。
每次从 SQL 添加另一个检索调用时,都会更频繁地调用外部库,这意味着您可能运行更长时间,更频繁地分配和释放更多内存(这会增加碎片),并可能导致数据库被重新读取闪存。 假设您可以(参见项目符号#2),一旦拥有数据,保留数据很可能会好得多。
当您将数据集视为数据的“会话”时,更容易找出这个问题的答案。 你填充数据集; 你和他们一起工作; 然后在完成后将数据放回或丢弃。 所以你需要问这样的问题:
既然你说它是一个没有大量数据的单用户应用程序,我认为你可以安全地在开始时加载所有内容,在数据集中使用它,然后在关闭时更新。
在这种情况下,您需要关注的主要事情是:如果应用程序由于崩溃、断电等原因异常退出怎么办? 用户会丢失他所有的工作吗? 但碰巧的是,数据集非常容易序列化,因此您可以相当轻松地实现“每隔一段时间保存一次”过程将数据集内容序列化到磁盘,这样用户就不会失去很多工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.