小编AJ.*_*AJ.的帖子

带流的文件I/O - 最佳内存缓冲区大小

我正在编写一个小型I/O库来协助更大的(业余爱好)项目.该库的一部分对文件执行各种功能,该文件通过FileStream对象读/写.每次StreamReader.Read(...)通过时,

我将启动一个事件,该事件将在主应用程序中用于显示进度信息.在循环中进行的处理是有缺陷的,但不是太耗时(例如,它可能只是一个简单的文件副本,或者可能涉及加密...).

我的主要问题是:使用的最佳内存缓冲区大小是多少?考虑到物理磁盘布局,我可以选择2k,这将覆盖CD扇区大小,并且是512字节硬盘扇区的很好的倍数.在抽象树的上方,你可以选择一个更大的缓冲区,它可以一次读取整个FAT簇.我意识到今天的PC,我可以选择更多的内存饥饿选项(例如几个MiB),但随后我增加了UI更新之间的时间,并且用户感觉到响应速度较慢的应用程序.

顺便说一句,我最终希望为FTP/HTTP服务器上托管的文件提供类似的界面(通过本地网络/快速DSL).那些最佳的内存缓冲区大小(再次,感知响应性与性能之间的"最佳情况"权衡)?

c# size optimization buffer file

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

在编译ac#应用程序时设置平台会有什么不同吗?

在VS2012(和以前的版本...)中,您可以在构建项目时指定目标平台.但我的理解是,C#被"编译"到CIL,然后在主机系统上运行时进行JIT编译.

这是否意味着指定目标平台的唯一原因是故意限制用户在某些体系结构上运行软件或强制应用程序在64位计算机上以32位运行?我不知道它会与优化有关,因为我猜这发生在CIL - > Native阶段,它发生在主机架构的即时时间?

这个MS Link似乎没有提供任何替代解释,我没有发现你应该,例如,释放相同应用程序的单独32/64位版本的事实的建议 - 为"anycpu"编译的东西似乎是合乎逻辑的应该同样运行,再次,优化将在JIT阶段应用.

c# optimization jit cil compiler-optimization

14
推荐指数
2
解决办法
377
查看次数

在ViewModel上使用DependencyProperty和Entity Framework

我正在使用带有Entity Framework模型的MVVM模式在C#中编写桌面应用程序.我倾向于在我的VM中使用DependencyProperties并且(通常)更喜欢这个系统而不是实现INotifyPropertyChanged.我想保持一致.我的虚拟机访问模型中的实体,我设法将事物分开 - 视图除了绑定和命令名称之外没有知道VM,并且模型已知道VM的知识.

在VM中使用INotifyPropertyChanged,更新模型中的实体似乎很容易:

public string Forename
    {
        get { return CurrentPerson.Forename; }
        set
        {
            if (Forename != value)
            {
                CurrentPerson.Forename = value;
                NotifyPropertyChanged("Forename");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

...其中CurrentPerson是由实体数据模型自动创建的Person对象.因此,没有专门用于存储Forename的私有字段.

使用DependencyProperties,似乎我必须使用GetValue和Setvalue创建DP,添加默认属性,然后使用PropertyChangedCallback来更新CurrentPerson实体.在这种情况下调用回调似乎增加了开销,以便与我的其他VM保持一致.

问题是,这些方法中的一种或另一种是我应该做的事情吗?在这种情况下,我应该使用DependencyProperty还是INotifyPropertyChanged?应该指出的一点是,这可能是一个非常大规模的项目(插件和来自不同机器的大量数据库访问),并且所有内容都应该是可重用的,并且模块尽可能"断开连接" .

c# wpf entity-framework dependency-properties inotifypropertychanged

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

在 MAUI 中进行设计 - 设计时 BindingContext

在 WPF 中,我使用了以下的正常组合:

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{d:DesignData...}"
Run Code Online (Sandbox Code Playgroud)

允许设置设计时 DataContext。这意味着我在 XAML 中获得了合理的 Intellisense。我意识到上面的代码无法编译,但你明白了。

我刚刚开始使用 MAUI(没有 Blazor),并且希望实现同样的目标 - 这样我就可以告诉 Visual Studio 我的 ContentView 将绑定到特定的对象类型,即 d:BindingContext="" 以这样的方式运行时会被忽略吗?这将使设计 ItemTemplates 变得更加容易!

data-binding xaml design-time design-time-data maui

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