小编Rac*_*hel的帖子

如何同步运行异步Task <T>方法?

我正在学习async/await,并遇到了需要同步调用异步方法的情况.我怎样才能做到这一点?

异步方法:

public async Task<Customers> GetCustomers()
{
    return await Service.GetCustomersAsync();
}
Run Code Online (Sandbox Code Playgroud)

正常使用:

public async void GetCustomers()
{
    customerList = await GetCustomers();
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用以下内容:

Task<Customer> task = GetCustomers();
task.Wait()

Task<Customer> task = GetCustomers();
task.RunSynchronously();

Task<Customer> task = GetCustomers();
while(task.Status != TaskStatus.RanToCompletion)
Run Code Online (Sandbox Code Playgroud)

我也从这里尝试了一个建议,但是当调度程序处于暂停状态时它不起作用.

public static void WaitWithPumping(this Task task) 
{
        if (task == null) throw new ArgumentNullException(“task”);
        var nestedFrame = new DispatcherFrame();
        task.ContinueWith(_ => nestedFrame.Continue = false);
        Dispatcher.PushFrame(nestedFrame);
        task.Wait();
}
Run Code Online (Sandbox Code Playgroud)

以下是调用的异常和堆栈跟踪RunSynchronously:

System.InvalidOperationException

消息:可能无法在未绑定到委托的任务上调用RunSynchronously.

InnerException:null

资料来源:mscorlib …

c# asynchronous async-await c#-5.0

606
推荐指数
16
解决办法
36万
查看次数

我的Objective-C单身人物应该是什么样的?

我的单例访问器方法通常是以下的一些变体:

static MyClass *gInstance = NULL;

+ (MyClass *)instance
{
    @synchronized(self)
    {
        if (gInstance == NULL)
            gInstance = [[self alloc] init];
    }

    return(gInstance);
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来改善这个?

singleton design-patterns objective-c object-initializers

334
推荐指数
10
解决办法
18万
查看次数

MyISAM和InnoDB有什么区别?

我知道之前已经问过这个问题,但大部分时间都会询问与特定数据库或表格有关的问题.我无法在这个网站上找到描述两个引擎及其差异的答案,而不考虑某些特定数据库.

我希望将来能够在设计表或数据库时做出更明智的决策,所以我正在寻找关于两个存储引擎之间差异的全面答案.

MyISAMInnoDB有什么区别,在尝试在一个或另一个之间做什么时,我应该寻找什么?

mysql database myisam innodb

250
推荐指数
2
解决办法
26万
查看次数

如何为用户定义的字段设计数据库?

我的要求是:

  • 需要能够动态添加任何数据类型的用户定义字段
  • 需要能够快速查询UDF
  • 需要能够基于数据类型对UDF进行计算
  • 需要能够根据数据类型对UDF进行排序

其他信息:

  • 我主要是在寻找表现
  • 有几百万条Master记录可以附加UDF数据
  • 当我上次检查时,我们当前的数据库中有超过50mil的UDF记录
  • 大多数情况下,UDF仅附加到几千个Master记录中,而不是全部记录
  • UDF未加入或用作键.它们只是用于查询或报告的数据

选项:

  1. 使用StringValue1,StringValue2创建一个大表... IntValue1,IntValue2,...等我讨厌这个想法,但如果有人能告诉我它比其他想法更好,为什么会考虑它.

  2. 创建一个动态表,根据需要按需添加新列.我也不喜欢这个想法,因为除非你索引每一列,否则我觉得性能会很慢.

  3. 创建一个包含UDFName,UDFDataType和Value的表.添加新的UDF时,生成一个View,它只提取该数据并将其解析为指定的任何类型.不符合解析标准的项返回NULL.

  4. 创建多个UDF表,每种数据类型一个.所以我们有UDFStrings,UDFDates等的表.可能和#2一样,并且只要添加新字段就自动生成View

  5. XML数据类型?我之前没有使用过这些,但已经看过它们了.不确定他们是否会给我我想要的结果,尤其是性能.

  6. 别的什么?

sql database database-design user-defined-fields

138
推荐指数
7
解决办法
5万
查看次数

虚拟化ItemsControl?

我有一个ItemsControl数据列表,我想虚拟化,但VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于ItemsControl.

这是真的吗,还是有另一种方法可以做到这一点,我不知道?

要测试我一直在使用以下代码块:

<ItemsControl ItemsSource="{Binding Path=AccountViews.Tables[0]}"
              VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <TextBlock Initialized="TextBlock_Initialized"  
                   Margin="5,50,5,50" Text="{Binding Path=Name}" />
    </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

如果我将其更改ItemsControl为a ListBox,我可以看到该Initialized事件只运行了几次(巨大的边距只是因此我只需要通过一些记录),但是ItemsControl每个项目都会被初始化.

我试过设置ItemsControlPanelTemplate为a VirtualizingStackPanel但似乎没有帮助.

wpf virtualization itemscontrol virtualizingstackpanel

121
推荐指数
2
解决办法
5万
查看次数

Panel的顺序在渲染时间和性能方面最有效?

很多时候,多个面板适合我想要的布局,但我知道不同面板类型的渲染时间有所不同.

例如,MSDN声明

相对简单Panel,例如Canvas,可以具有比更复杂的更好的性能Panel,例如Grid.

那么在渲染时间和性能方面,WPF面板的最高效率是多少?

WPF小组:

  • Canvas
  • DockPanel
  • Grid
  • UniformGrid
  • StackPanel
  • WrapPanel
  • VirtualizingPanel/VirtualizingStackPanel

我很确定我在网上看到了这个列表,但我现在找不到它.

我正在寻找的理想答案将为我提供一个面板列表,按照他们最快速渲染的顺序.我知道儿童的数量是面板效率的一个重要因素,因此为了这个问题,假设每个面板只有一对Label/ TextBox一对.

此外,我想要一个例外列表,例如特定面板,它们在某些条件下比其他面板表现更好.

更新

总结基于下面接受的答案,面板性能基于子项的数量和布局,但一般来说,从最快到最慢的列表是:

  • Canvas
  • StackPanel
  • WrapPanel
  • DockPanel
  • Grid

此外,如果有许多项目并不总是适合屏幕,则应始终使用VirtualizingPanel/ VirtualizingStackPanel.

在强烈选择此列表中的项目之前,我强烈建议您阅读下面接受的答案以获取更多详细信息.

wpf performance rendering panel

120
推荐指数
3
解决办法
3万
查看次数

什么是ViewModelLocator,与DataTemplates相比有哪些优缺点?

有人可以快速总结一下ViewModelLocator是什么,它是如何工作的,以及与DataTemplates相比使用它的优缺点是什么?

我曾尝试在Google上查找信息,但似乎有许多不同的实现,并没有关于它是什么以及使用它的优点/缺点的严格列表.

wpf datatemplate mvvm mvvm-light viewmodellocator

109
推荐指数
3
解决办法
4万
查看次数

为什么在循环期间追加TextBox.Text会在每次迭代时占用更多内存?

简短的问题

我有一个运行180,000次的循环.在每次迭代结束时,它应该将结果附加到TextBox,TextBox是实时更新的.

使用MyTextBox.Text += someValue导致应用程序占用大量内存,并且在几千条记录之后它耗尽了可用内存.

是否有更有效的方式将文本附加到TextBox.Text180,000次?

编辑我真的不关心这个特定情况的结果,但我想知道为什么这似乎是一个记忆猪,并且如果有一种更有效的方法将文本附加到TextBox.


长(原始)问题

我有一个小应用程序,它读取CSV文件中的ID号列表,并为每个应用程序生成PDF报告.生成每个pdf文件后,ResultsTextBox.Text将附加到已处理的报告的ID号以及已成功处理的报告的ID号.该进程在后台线程上运行,因此ResultsTextBox会在项处理时实时更新

我目前正在针对180,000个ID号运行该应用程序,但是应用程序占用的内存随着时间的推移呈指数级增长.它从大约90K开始,但是大约3000条记录占用大约250MB,而4000条记录占用大约500 MB的内存.

如果我注释掉结果文本框的更新,内存保持相对静止大约90K,所以我可以假设写作ResultsText.Text += someValue是导致它吃内存的原因.

我的问题是,这是为什么?将数据附加到不吃内存的TextBox.Text的更好方法是什么?

我的代码看起来像这样:

try
{
    report.SetParameterValue("Id", id);

    report.ExportToDisk(ExportFormatType.PortableDocFormat,
        string.Format(@"{0}\{1}.pdf", new object[] { outputLocation, id}));

    // ResultsText.Text += string.Format("Exported {0}\r\n", id);
}
catch (Exception ex)
{
    ErrorsText.Text += string.Format("Failed to export {0}: {1}\r\n", 
        new object[] { id, ex.Message });
}
Run Code Online (Sandbox Code Playgroud)

还应该值得一提的是,该应用程序是一次性的事情,并不需要花费几个小时(或几天:)来生成所有报告.我主要担心的是,如果它达到系统内存限制,它将停止运行.

我没关系更新结果TextBox注释掉来运行这个东西,但我想知道是否有一种更有效的内存方式将数据附加到TextBox.Text未来的项目中.

c# wpf

82
推荐指数
4
解决办法
5508
查看次数

ASP.Net或WPF(C#)?

我们的团队对此有所分歧,我希望得到一些第三方意见.

我们正在构建一个应用程序,无法决定是否要将.Net WPF桌面应用程序与WCF服务器或使用jQuery的ASP.Net Web应用程序一起使用.我想我会在这里提出一些问题,并提出一些规格,看看使用任何一方的利弊是什么.我有自己的最爱,觉得我有偏见.

理想情况下,我们希望尽可能快地构建软件的初始版本,然后放慢速度并花时间构建我们以后想要的其他功能/组件.最重要的是我们希望软件快速.用户整天都会查看记录,加载记录或刷新屏幕的延迟会影响他们的工作效率.

申请细节:

  • 我估计初始版本大约有100个不同的屏幕,并且计划在最初版本之后添加许多额外的屏幕.
  • 我们希望使用双向通信来提醒和事件系统
  • 目前必须支持大约100个用户,尽管我们已被告知允许增加多达500个用户
  • 我们有多个地点

要考虑的项目(可能最初在某些情况下,但在将来的版本中):

  • 初始发布后要添加其他组件的空间(这里有很多......可能比初始应用程序更有效)
  • 键盘导航
  • 表现是必须的
  • 生产速度到初始版本
  • 维护开销低
  • 未来的支持
  • Softphone/Scanner集成

我们的开发人员:

  • 我们有一位程序员在过去的几个月里一直在学习WPF,并建议我们使用WPF.
  • 我们有一个熟悉ASP.Net的第二个程序员,他可能会在将来对该项目有所帮助,尽管他不会在最初版本发布之前对其进行大量工作,因为他的时间用于维护我们当前的软件.
  • 有我,两个人一起工作,也很舒服
  • 我们有一家外部公司负责项目管理,他们是一家ASP.Net公司.
  • 我们计划招聘1-2人,但我们需要先了解我们的目标

环境:

  • 一般用户在具有终端服务的Windows 2003服务器上.它们通过RDP连接使用WYSE瘦客户端进行连接.管理员工作人员拥有自己的XP或更高版本的PC.虽然用户仅限于使用IE作为Web浏览器,但允许用户指定自己的分辨率.
  • 其他位置通过MPLS连接连接到我们的网络

基于此,你会选择什么,为什么?

我特别感兴趣的是那些有ASP.Net和WPf经验的开发人员.

asp.net wpf

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

我可以在string.Format中格式化NULL值吗?

我想知道是否存在在string.Format中格式化NULL值的语法,例如Excel使用的语法

例如,使用Excel我可以指定格式值{0:#,000.00;-#,000.00,NULL},这意味着如果为正数则将数值显示为数字格式,如果为负数则显示在括号中的数字格式,如果值为null则显示为NULL

string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);
Run Code Online (Sandbox Code Playgroud)

编辑

我正在寻找所有数据类型的格式NULL/ Nothing值,而不仅仅是数字类型.

我的例子实际上是不正确的,因为我错误地认为Excel使用第3个参数,如果值为NULL,但它实际上在值为0时使用.我将它留在那里因为它是我能想到的最接近我的东西希望能做到.

我希望避免使用null合并操作符,因为我正在编写日志记录,并且数据通常不是字符串

写一些类似的东西要容易得多

Log(string.Format("Value1 changes from {0:NULL} to {1:NULL}", 
    new object[] { oldObject.SomeValue, newObject.SomeValue }));
Run Code Online (Sandbox Code Playgroud)

而不是写

var old = (oldObject.SomeValue == null ? "null" : oldObject.SomeValue.ToString());
var new = (newObject.SomeValue == null ? "null" : newObject.SomeValue.ToString());

Log(string.Format("Value1 changes from {0} to {1}", 
    new object[] { old, new }));
Run Code Online (Sandbox Code Playgroud)

c# string.format string-formatting

40
推荐指数
2
解决办法
3万
查看次数