首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建静态Datacontext()或在需要时创建.哪个更好?为什么?

创建静态Datacontext()或在需要时创建,哪个更好?为什么?

在这个问题中,我们讨论的是如何创建Datacontext对象。Datacontext是一个用于处理数据的对象,通常在数据访问层中使用。创建静态Datacontext()或在需要时创建,哪个更好?这取决于应用程序的需求和设计。

创建静态Datacontext():

  1. 优势:静态Datacontext对象在整个应用程序生命周期中只创建一次,因此可以避免不必要的重复创建。
  2. 优势:静态Datacontext对象可以在多个线程之间共享,这有助于提高性能。
  3. 优势:静态Datacontext对象可以在整个应用程序中访问,这有助于简化代码和提高可维护性。
  4. 缺点:静态Datacontext对象可能会导致线程安全问题,因为多个线程可能同时访问同一个对象。

在需要时创建:

  1. 优势:在需要时创建Datacontext对象可以确保每个线程都有自己的Datacontext对象,从而避免线程安全问题。
  2. 优势:在需要时创建Datacontext对象可以减少内存使用,因为只有在需要时才会创建对象。
  3. 缺点:在需要时创建Datacontext对象可能会导致性能下降,因为每次都需要创建新的对象。

总结:

选择创建静态Datacontext()还是在需要时创建,取决于应用程序的需求和设计。如果应用程序需要在多个线程之间共享Datacontext对象,并且不需要考虑线程安全问题,那么创建静态Datacontext()可能是更好的选择。如果应用程序需要确保每个线程都有自己的Datacontext对象,并且希望减少内存使用,那么在需要时创建可能是更好的选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

win10 uwp MVVM入门

我们写界面用 xaml 和 cs 结合起来,做出好看的效果。 ViewModel 是界面的抽象,这里我们不需要去理会界面长什么样,我只需要知道我们需要给界面提供什么。...写在xaml.cs,这是最简单的方式,可以使用代码或在xaml绑定DataContent和ViewModel 写成 xaml 静态资源,这个方式我们使用次数还是比较多,可以让 Code 不写代码就可以绑定...好处是:我们添加一个 ViewModel 类,不需要去修改 ViewModelLocater 。...在我的私密密码本 https://www.microsoft.com/store/apps/9nblggh5cc3g 我的创建密码页面需要和密码本联系,在创建密码创建一个密码,就把密码放到密码本 所以我们上面的不能做到...ListModel 在我们写 CodeStorageModel ,我们也不知道哪个页面会发送,不知哪个页面接收,我们直接在接收看信息发送的哪个,找出,使用他的接收 public void

2K10

WPF 轻量级 MVVM 框架入门 2.1.2 安装项目要求创建主页面找到 ViewModel通过附加属性找到 ViewModel跳转页面跳转命令自定义命令

找到 ViewModel 现在在创建的 ViewModel 推荐在 App.xaml 作为资源,因为 WPF 的页面跳转没有和 UWP 一样可以获得参数,需要通过自己的方式拿到。...打开 App.xaml 在里面添加 ViewModel 作为静态属性 <Application x:Class="lindexi.Mvvm.App" xmlns="http:/...<em>DataContext</em>="{StaticResource ViewModel}" 在 MainWindow 的构造函数拿到 ViewModel ,需要强转 public...source; viewModel.SawbelChaceredis = message.SawbelChaceredis; } } 在 B 页面点击,...E8%BD%BB%E9%87%8F%E7%BA%A7-MVVM-%E6%A1%86%E6%9E%B6%E5%85%A5%E9%97%A8-2.1.2.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验

1.2K20
  • WPF 列表控件数据源绑定多个数据集合方法

    获取对象的引用,同时需要通过 DataContext 的某个属性获取到对应的属性,全部代码如下 <ListBox x:Name="MyList" ItemsSource="{DynamicResource...但不足的地方在于绑定 ItemsSource <em>需要</em>用到 DynamicResource 的方式,相对性能不如上面方法。<em>为什么</em><em>需要</em> DynamicResource 资源?...<em>为什么</em>资源<em>需要</em>定义在控件里面的 Resource 里面?原因是为了获取到控件的 x:Reference 对象。...也就是说<em>需要</em>在控件<em>创建</em>出来之后,才能通过 x:Reference 获取控件,而控件的数据内容<em>需要</em>依赖资源的定义,因此也只有以上方式的写法 如果能从控件的上层容器拿到数据对象,那可以将资源定义在容器里面,...通过 StaticResource 绑定到<em>静态</em>资源。

    3.5K21

    Java高频面试题 -- 静态

    Java中为什么需要静态变量? 答:每当我们希望为一个类的所有对象拥有一个公共属性,我们就使用一个类级别的变量,即静态变量。 在类加载,此变量仅在内存中加载一次。...为什么用Java创建静态变量不是一个好习惯? 答:静态变量是类的所有对象共有的。 如果创建了新对象,则无需测试静态变量的值。 使用静态变量的任何代码都可以处于任何状态。 它可以在新对象内或在类级别。...Java中静态方法的目的? 答:Java提供了静态方法的功能来在类级别创建行为。 静态方法是类的所有对象所共有的。 我们不需要创建类的任何对象来调用静态方法。...因此,它提供了不创建用于调用它的对象的便利。 静态方法也可以访问和修改静态数据成员。 这也有助于在类级别上保持行为和状态。 4. 为什么在Java中将main方法标记为静态方法?...但是要调用实例方法,我们需要创建/获取一个对象。 实例成员变量不能通过静态方法访问。 但是实例方法可以调用实例变量和静态变量。

    46921

    win10 uwp 在 ItemsPanelTemplate 里面通过样式绑定 Orientation 显示方向

    Class (Windows.UI.Xaml) - Windows UWP applications 说到在 UWP 是不支持在 Setting 的 Value 绑定,这个和 WPF 不相同,建议使用静态的资源...在这里是几乎无法通过静态资源做到绑定的,那么如何让在后台代码修改的时候,可以修改 xaml 里面的 ListView 的列表显示方向绑定到后台的属性?...BindingMode.OneWay }); } }); } } 那么为什么需要在...因为初始的时候 listView.ItemsPanelRoot 是没有值的,需要等待创建完成这个属性 上面的代码是直接绑定,绑定到 DataContext 也就是需要在 ListView 指定 DataContext...才可以绑定 指定当前的 Page 作为 ListView 的 DataContext 请看代码 <ListView DataContext=

    45510

    win10 uwp 在 ItemsPanelTemplate 里面通过样式绑定 Orientation 显示方向

    Class (Windows.UI.Xaml) - Windows UWP applications 说到在 UWP 是不支持在 Setting 的 Value 绑定,这个和 WPF 不相同,建议使用静态的资源...在这里是几乎无法通过静态资源做到绑定的,那么如何让在后台代码修改的时候,可以修改 xaml 里面的 ListView 的列表显示方向绑定到后台的属性?...BindingMode.OneWay }); } }); } } 那么为什么需要在...因为初始的时候 listView.ItemsPanelRoot 是没有值的,需要等待创建完成这个属性 上面的代码是直接绑定,绑定到 DataContext 也就是需要在 ListView 指定 DataContext...才可以绑定 指定当前的 Page 作为 ListView 的 DataContext 请看代码 <ListView DataContext=

    82730

    WPF 列表右键菜单比较符合 MVVM 的命令绑定方法

    ,我计划替换掉我现在自己使用的FDM工具,这样我如果自己下载炸了,我就会去修我的库 在使用的时候我发现我需要这样的一个功能,我需要在下载完成之后,自己去找下载到哪个文件夹,因此我期望能右击对应的下载项的时候...按照需求,咱需要一个右键菜单,好那么先创建一个右键菜单 <MenuItem...让右键菜单知道当前选中的是哪个 GridView 的 Row 是很逗比的,因为咱可以使用 WPF 的 DataContext 绑定的方法,让数据一层层分发。...通过绑定的方法和 DataContext 是视觉树继承的,就可以做到自动拿到当前的右击项的数据,传到后台方法 本文的更改放在 github 上,小伙伴可以通过对比更改内容,就能知道本文修改的代码 如果在右击的本身是需要修改...90%88-MVVM-%E7%9A%84%E5%91%BD%E4%BB%A4%E7%BB%91%E5%AE%9A%E6%96%B9%E6%B3%95.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验

    3K20

    WPF --- 如何以Binding方式隐藏DataGrid列

    预想方案 像这样: 先在ViewModel创建数据源 People 和控制列隐藏的 IsVisibility,这里直接以 MainWindow 为 DataContext public partial...但实际测试就会发现,勾选 CheckBox 能够改变 DataContext.IsVisibility 的值,但是无法触发转换器 VisibilityConverter,即使不用 RelativeSource...这是为什么呢? 我疑惑了很久,直到看到了Visual Studio中的实时可视化树: 从图中可以看出,虽然我在 Xaml 中声明了两列 DataGridTextColumn,但他根本不在可视化树中。...解决方案 所以,通过直接找 DataContext 的方式,是不可行的,那就曲线救国。 既然无法找到承载 DataContext.IsVisibility 的对象,那就创建一个能够承载的对象。...这时候就需要借助一个抽象类 System.Windows.Freezable。

    47310

    【我们一起写框架】MVVM的WPF框架之绑定(二)

    创建的页面的DataContext就被自动赋值了。...BaseCommand 在WPF中,系统为我们提供一些Command,但为了能处理更多细节,自定义Command的效果会更好,所以,我们需要编写属于我们框架自己的自定义BaseCommand。...首先我们找到VM_WindowMain,创建切换Page的Command和存储页面实例的属性FrameSource。...因为ChangeFrameSourceCommand是BaseCommand类型,所以,当按钮被按下,就会触发ChangeFrameSourceCommand定义的执行命令——ChangeFrameSourceCommand_Executed...所以为了更好的掌控UI,降低开发者的门槛,我们还需要编写数据控件,让开发者在不能熟练掌握Xaml样式的情况下,依然可以顺利完成开发。

    1.8K30

    《深入浅出WPF》学习笔记之深入浅出话Binding

    View Code 6.3.3 Binding的路径(Path)   即绑定到底需要关注哪个属性的值。...(WPF默认使用的源)   *ElementName指定源:在C#代码中把对象的Name作为源赋给Binding   *RelativeSource指定源:当控件需要关注自己的、自己容器的或者自己内部元素的某个值...DataContext的用法:   *当UI上多个控件Binding同一个对象   *当Source对象不能被直接访问——比如B窗体内的控件想把A窗体内的控件当做Binding源,但A窗体内的控件是...ValidationRules属性:数据有效性校验   Converter属性:数据类型转换 6.4.1 Binding的数据校验    需要创建抽象类ValidationRule的派生类并实现它的Validate...以Slider为源,TextBox为目标   当TextBox输入超出范围,边框会显示为红色   Binding默认只校验Target->Source,不校验Source->Target的数据,如果想校验需要设置

    5.5K10

    一步一步学Linq to sql(二):DataContext与实体

    DataContext提供了以下一些使用的功能:         以日志形式记录DataContext生成的SQL         执行SQL(包括查询和更新语句)         创建和删除数据库 DataContext...是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。...其中,CustomerID字段是主键,如果没有指定Column特性的Name属性,那么系统会把属性名作为数据表的字段名,也就是说实体类的属性名就需要和数据表中的字段名一致。            ...但是不可否认,对于复杂的查询,使用TSQL能获得更好的效率。因此,DataContext类型也提供了执行SQL语句的能力。代码的执行结果如下图: ?...;database=NorthwindTest;uid=sa;pwd=saa"/>  那么以及test数据库表也会一同被创建

    82720

    C#语法——消息,MVVM的核心技术。

    public interface INotifyPropertyChanged { //在更改属性值发生。...为什么还要用消息呢? 因为有些数据是存储在非引用类型的对象中的。比如字符串,或数字等。 为了让字符串、数字等数据的修改也能如引用类型一样,可以传递回给源,就需要使用消息了。...首先,我们使用WPF创建一个项目,然后创建一个页面,起名为WindowNotify,编辑内容如下: <Window x:Class="WpfApplication.WindowNotify"...这里用vm的KName属性赋值,稍微有点特别,稍后再介绍。 然后我们运行页面,并修改两个文本框内的值。再点击查看结果按钮。得到界面如下: ?...学会消息才能更好的理解MVVM。 并且学会消息,还能帮助我们更好的理解现在流行的前端JS的MVVM。虽然实现方式不一样,但道理是一样的。

    1.2K20

    C# WPF MVVM开发框架Caliburn.Micro入门介绍①

    此机制还允许“Action.Target”独立于DataContext而变化,并允许在UI中的不同点从触发器声明它。...当触发器发生,“消息”在元素树中冒泡,寻找能够调用指定方法的Action.Target(处理程序)。这就是为什么我们称之为信息。动作消息的“冒泡”特性非常强大,非常有用,尤其是在主/细节场景中。...例如,如果您确实需要,您可以为按钮“MouseMove”而不是“Click”创建约定事件。 Binding 约定 我们还支持基于约定的数据绑定。这也适用于x:Name。...此外,IResult的实现可以访问执行上下文,该上下文告诉它们执行的是什么ActionMessage、哪个FrameworkElement触发了要发送的消息、ActionMessage由哪个实例处理(在上调用...只需向它传递一个VM实例,它就会找到视图,必要将其包装在窗口中,应用您配置的所有约定并显示窗口。

    1.7K20

    WPF 托盘显示 NotifyIcon WPF

    因为托盘是程序的托盘,不是窗口的,所以推荐代码是写在 App.xaml.cs 里面 先创建一个托盘的界面,界面在 App.xaml 创建 托盘是需要图标的,可以从 Iconfont-阿里巴巴矢量图标库...在托盘图标需要是 16x16 32位 的 ico 文件 将图片下载放在解决方案,修改为 Resource 就可以 ?...Class="HouneaLeabeltezairKayballjachall.App" 为自己的项目 打开 App.xaml.cs 获取资源,资源只有在获取的时候才会创建创建了 TaskbarIcon...双击托盘运行代码需要添加命令,创建一个 ViewModel 用来绑定命令 public class DelegateCommand : ICommand { public...https://lindexi.gitee.io/post/WPF-%E6%89%98%E7%9B%98%E6%98%BE%E7%A4%BA.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验

    7.1K31

    WPF--模板选择

    典型的,把模板关联到一块特定的数据上,不过通常希望动态的确定使用哪个模板---既可以基于一个属性值,也可以是一个全局状态。...当真正需要大规模替换模板,也可以使用DataTemplateSelector。           ...DataTemplateSelector提供了一个单一的方法----SelectTemplate,以允许通过执行任何逻辑来决定使用哪个模板。...可以在被包含的元素中查找模板,并返回一些硬编码的模板,甚至动态的为每个条目创建模板。 首先,创建一个继承自DataTemplateSelector的类,并完成一些在几个模板中进行旋转的逻辑。...另外为了使读者能更好的理解,现提供另一个我项目中的例子供大家参考 后台: public class LocalNameTemplateSelector : DataTemplateSelector

    1.2K40

    如何让WPF中的ValidationRule实现参数绑定

    在WPF中,数据模型允许将ValidationRules与Binding对象关联,可以通过继承ValidationRule类并重写Validate方法来创建自定义规则。...问题 尽管创建自定义校验规则可以满足大部分应用场景,但是当我们校验规则是动态变化的时候就有些麻烦了。例如,开发一个文件管理系统,要求文件名不能与系统中已有的文件重名。...这个时候需要先获取到系统中已有文件的名称列表,并绑定到ValidationRule上。...这是为什么呢?经过研究发现,FileNameValidationRule并不在可视化树上,无法继承和访问到DataContext,因此绑定失败。...父元素的DataContext会自动传递给其子元素,以便子元素可以访问父元素的数据对象。但是,不在可视化树上的对象,无法继承和直接绑定到DataContext

    25520
    领券