我有一个处理所有数据库方法的类,包括与实体框架相关的东西.当需要数据时,其他类可以调用此类中的方法,例如
public List<LocalDataObject> GetData(int start, int end);
Run Code Online (Sandbox Code Playgroud)
数据库使用LINQ to EF进行查询,然后调用类可以迭代数据.但由于其他类无法访问EF中的实体,因此我需要对查询执行"ToList()"操作,并将完整数据集提取到内存中.
如果这个集非常大(GB的10s-100s)会发生什么?
有没有更有效的迭代方法,仍然保持松耦合?
在我的WPF中尝试将我的类逻辑与任何接口相关的数据分开,并仅提供ObservableCollection属性进行绑定.
问题是,当我从其他线程访问那些绑定的OC时,我需要通过调度程序执行此操作.结果是,每当其中一个方法尝试更新OC时,我都需要添加许多隐藏在我的类中的Dispatcher.Invoke()调用.
我怎么能以更干净和分离的方式做到这一点,所以调度员调用是从我的方法中抽象出来的?
我有一个应用程序(C#,WPF)显示许多金融图表,其中包含来自服务器的实时数据流.在内存中收集的数据可能会变得有点大,我不想在磁盘上保留任何数据.
由于历史数据本身没有变化,只是添加了,是否有意义将数据(存储在集合对象中)保存为某种压缩格式?
是否有可能,如果有的话,任何人都可以推荐一个好的做法吗?
UPDATE
关于性能和权衡的一些注意事项:我知道压缩会增加访问数据的延迟,但是,用户只需要对到达的新数据进行快速更新.访问已经渲染的数据(例如,研究或重新渲染)时,他不需要快速响应.
我有以下代码用于模拟实时数据源,它同时发送一条消息,"Portfolio.Symbols"内的集合中每个"Symbol"类型的对象都应该响应(通过另一种方法对其进行一些处理).
为了使它同时成立,我尝试以下列方式注册匿名事件处理程序:
static public void RegisterEvents()
{
foreach (Symbol symbol in Portfolio.Symbols)
{
GenerateQuoteRequest += () => { SomeMethod(symbol); };
}
}
static public void Run()
{
OnGenerateQuoteRequest();
Thread.Sleep(100);
}
public delegate void OnGenerateQuoteRequestEventHandler();
public static event OnGenerateQuoteRequestEventHandler GenerateQuoteRequest
= delegate {};
...
Run Code Online (Sandbox Code Playgroud)
然后我尝试提升事件,希望我会得到一些"SomeMethod"实例启动.不幸的是,只调用了最后添加的"符号".
我在这里错过了什么?