我应该在我的C#应用程序中使用多少DataTable对象?
我是一名经验丰富的程序员,使用传统的(但面向对象的)开发工具,并切换到C#/.Net。我正在使用SQLServerCE3.5编写一个小的单用户应用程序。我已经阅读了概念数据集和相关文档,我的代码运行正常 现在,我想确保我做得“正确”,从经验丰富的.Net/SQL Server程序员那里得到一些反馈,这是阅读文档时得不到的 我注意到在一些地方有这样的代码:我应该在我的C#应用程序中使用多少DataTable对象?,c#,.net,sql-server,datatable,dataset,C#,.net,Sql Server,Datatable,Dataset,我是一名经验丰富的程序员,使用传统的(但面向对象的)开发工具,并切换到C#/.Net。我正在使用SQLServerCE3.5编写一个小的单用户应用程序。我已经阅读了概念数据集和相关文档,我的代码运行正常 现在,我想确保我做得“正确”,从经验丰富的.Net/SQL Server程序员那里得到一些反馈,这是阅读文档时得不到的 我注意到在一些地方有这样的代码: var myTableDataTable = new MyDataSet.MyTableDataTable(); myTableTableAd
var myTableDataTable = new MyDataSet.MyTableDataTable();
myTableTableAdapter.Fill(MyTableDataTable);
... // other code
在单用户应用程序中,您通常会在应用程序启动时只执行一次,为每个表实例化一个DataTable对象,然后存储对它的引用,这样您就可以只使用已经填充了数据的单个对象了吗?这样,您将永远只从数据库中读取一次数据,而不是可能多次读取。或者说,这样做的开销太小了,以至于无关紧要(加上大表可能会适得其反)?对于CE来说,这可能不是问题。如果你把这个应用推给成千上万的用户,而他们都访问了一个集中的数据库,那么你可能需要花一些时间进行优化。在像CE这样的单用户DB实例中,除非有数据表明需要优化,否则我不会花时间担心它。过早优化等。决定两件主要事情之间差异的方法 1.数据是否会不断被访问 2.有很多数据吗 如果您一直在使用表中的数据,请在首次使用时加载它们。 如果只是偶尔使用数据,请在需要时填写表格,然后丢弃
例如,如果您有10个gui屏幕,并且仅在其中一个屏幕上使用myTableDataTable,则仅在该屏幕上读取它。选择实际上并不取决于C本身。这归结为以下两个方面的平衡:
每次从SQL添加另一个检索调用时,都会更频繁地调用外部库,这意味着您可能会运行更长的时间,分配和释放更多的内存(这会增加碎片),并可能导致从闪存中重新读取数据库。一旦拥有了数据,如果可以的话,很可能会更好地保留数据。当您将数据集视为数据的“会话”时,更容易找到这个问题的答案。你填写数据集;你和他们一起工作;然后将数据放回原处,或在完成后将其丢弃。所以你需要问这样的问题:
在这个场景中,您需要关注的主要问题是:如果由于崩溃、断电等原因导致应用程序异常退出,该怎么办。?用户是否会丢失所有工作?但实际上,数据集非常容易序列化,因此您可以相当容易地实现“每隔一段时间保存一次”将数据集内容序列化到磁盘的过程,这样用户就不会损失很多工作。如果您要迁移到.NET,我建议跳过ADO并查看Linq。您的意思是我可以使用Linq作为整个应用程序的数据提供者?您可以使用Linq获取数据并根据结果绑定,而不是使用数据集和TableAdapaters。这是一个更加顺畅的工作流程,伊姆霍。谢谢威尔,我正在查看。我假设这也是这类代码的发展方向。