小编Vok*_*Vok的帖子

.NET 5.0中WindowsAzure.Storage的TCP端口耗尽

我正在运行WindowsAzure.Storage库的最新版本6.1.1。这以前是一个已知问题,但应该已经在.NET 4.5.1中修复。这正是我遇到的问题。

我在Azure存储中命中了一个要插入100m +行的表。我一直专注于使代码快速且可扩展,它使运行Datacenter 2012 R2的Azure D12 VM达到最大化。我看到每秒处理5,000-10,000个实体(读取文件,处理,上传)。

更新:仅在Azure VM上发生。在我的家庭系统上不会发生。

该过程总是以大约16,384批(大约320,000条记录)崩溃,并出现经典的端口耗尽错误:通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种。

我已经做了平常的事情:增加MaxUserPort(64434)和减少TcpTimedWaitDelay(15秒)。鉴于MaxUserPort失败时具有令人怀疑的逻辑16,384,它似乎被忽略了。

Netstat显示,端口从来没有被关闭过。它们的状态始终保持为“已建立”,直到进程本身关闭,然后它们消失为止。

实际的连接代码归结为:

var acx = CloudStorageAccount.Parse(conn);
var client = acx.CreateCloudTableClient();
var table = client.GetTableReference("Test");
var op = new TableBatchOperation();

foreach (var record in batch) //Batch is just a bunch of entity objects
    op.InsertOrReplace(record);

try
{
    await table.ExecuteBatchAsync(op, opsConfig, null);
    Interlocked.Add(ref totalUploaded, batch.Count);
}
catch...
Run Code Online (Sandbox Code Playgroud)

我已经尝试过所有可以想到的变体-重复使用TableBatchOperations池,使用单个表/客户端/帐户为每次匹配以及两者之间的每种组合创建对象。

这个问题似乎是我无法达到的。据推测,两年前解决此问题时,由于未正确读取响应流,因此连接保持打开状态。

感谢任何建议!请问您是否需要更多信息或说明。

c# sockets tcp azure azure-storage

5
推荐指数
0
解决办法
565
查看次数

如何在SQL中基于多个"标签"查询数据?

我有三个简单的表:

项目

ItemID (int, PK)
ItemName (nvarchar50)
ItemCost (int)
Run Code Online (Sandbox Code Playgroud)

标签

TagID (int, PK)
TagName (nvarchar50)
Run Code Online (Sandbox Code Playgroud)

ItemTags

ItemID (int, FK->Items)
TagID (int, FK->Tags)
Run Code Online (Sandbox Code Playgroud)

如何编写查询"查找标记为tag1和tag2但不标记为tag3的所有项目"的效果?

我是否需要使用完全不同的架构?

sql sql-server schema

3
推荐指数
1
解决办法
1336
查看次数

LINQ:当对象可能为空时选择属性的更好方法?

var result = foo.FirstOrDefault(f => f.bar == barVal).someProperty
Run Code Online (Sandbox Code Playgroud)

如果没有匹配项(默认为 null),这将不起作用 - 尝试访问 null 对象上的属性。我们可以重写如下:

var result = foo.Where(f => f.bar == barVal)
                .Select(f => f.someProperty).DefaultIfEmpty(0).First()
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但这似乎不是最优雅的方法......有更好的方法吗?


当然,人们可以做一些事情,例如:

var result = 0;
var tmp = foo.FirstOrDefault(f => f.bar == barVal);
if(tmp != null) result = tmp.someProperty
Run Code Online (Sandbox Code Playgroud)

但在更复杂的查询中,这种方法看起来比 DefaultIfEmpty 方法更“混乱”

var tmpSet = dataSet.GroupBy(f => f.ID);
var newSet = tmp.Select(f => new { 
               ID = f.ID,
               SomeProperty = f.Where(g => g.bar == barVal)
                               .Select(f => f.SomeProperty)
                               .DefaultIfEmpty(0).First()
               });
Run Code Online (Sandbox Code Playgroud)

c# linq

2
推荐指数
1
解决办法
2558
查看次数

使用Angular 2时,是否需要在Typescript中复制我的Entity Framework类?

假设我有一个很好的C#后端与实体框架.我有我的数据库设置和一个简单的类

public class MyItem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ItemID { get; set; }
    public string ItemName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个很好的Angular2前端,我从API中检索数据并呈现如...

template: '<div>{{ItemName}} - {{ItemID}}</div>'
Run Code Online (Sandbox Code Playgroud)

目前我有一个重复的,看似冗余的打字稿类,即

export class MyItem{
  ItemID: number;
  ItemName: string;
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以避免这个打字稿类吗?我可以绑定到事先未定义的对象吗?在Angular 1中,我们可以绑定到范围{{MyItem.SomeProperty}}上的任何属性

entity-framework typescript angular

2
推荐指数
1
解决办法
2223
查看次数

正则表达式 - 从匹配中返回上一个和下一个单词

我目前有两个独立的正则表达式模式来查找目标字+下一个字和目标字+前一个字:

string text = "Here is a test MYWORD statement for MYWORD regex";
string pattern = "(\\bMYWORD\\s)(\\w+)"; //MYWORD statement; MYWORD regex
string pattern = "(\\w+)(\\s\\bMYWORD)"; //test MYWORD; for MYWORD
Run Code Online (Sandbox Code Playgroud)

正则表达式是否提供了一种优雅的方法来将上面的两种模式组合起来用于单个调用?

谢谢

编辑:非常感谢m.buettner和Qtax的精彩解释和示例 - 非常有用!

我已经尝试了一些提供的示例,并且这些在所需的上下文中匹配'MYWORD',但也许我还不够清楚:我试图返回上面评论的所有短语,即:

匹配(模式)应返回以下所有字符串:

'MYWORD statement'
'MYWORD regex'
'test MYWORD'
'for MYWORD'
Run Code Online (Sandbox Code Playgroud)

抱歉,如果我的原始问题没有解释得那么好!

c# regex regex-lookarounds

0
推荐指数
1
解决办法
2678
查看次数