我已经构建了这个代码来处理大量并行字符串之间的字符串比较以加快速度.
我使用了ConcurrentBag,因此所有线程(任务)都可以写入线程安全集合.然后我将此集合转储到一个文件中.
我遇到的问题是ConcurrentBag<string> log我转储到文件的速度比写入文件的速度快.因此,我的程序会持续消耗越来越多的内存,直到内存不足为止.
我的问题是我该怎么办?改进写日志?暂停任务直到转储ConcurrentBag然后恢复任务?什么是最快的选择?
这是代码:
CsvWriter csv = new CsvWriter(@"C:\test.csv");
List<Bailleur> bailleurs = DataLoader.LoadBailleurs();
ConcurrentBag<string> log = new ConcurrentBag<string>();
int i = 0;
var taskWriteToLog = new Task(() =>
{
// Consume the items in the bag
string item;
while (true) // (!log.IsEmpty)
{
if (!log.IsEmpty)
{
if (log.TryTake(out item))
{
csv.WriteLine(item);
}
else
Console.WriteLine("Concurrent Bag busy");
}
else
{
System.Threading.Thread.Sleep(1000);
}
}
});
taskWriteToLog.Start();
Parallel.ForEach(bailleurs, s1 =>
{
foreach (Bailleur s2 in bailleurs)
{
var lcs2 …Run Code Online (Sandbox Code Playgroud) 我有这个带有以下数据注释的模型,因为我想以这种格式处理日期:dd.MM.yyyy
[DataType(DataType.Date)]
[DateRange(ErrorMessageResourceName = "DateBetween", ErrorMessageResourceType = typeof(WizardStrings))]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? BirthDate1 { get; set; }
Run Code Online (Sandbox Code Playgroud)
在视图中:
@Html.EditorFor(model => model.BirthDate1 )
@Html.ValidationMessageFor(model => model.BirthDate1)
Run Code Online (Sandbox Code Playgroud)
MVC仍然使用以下格式呈现此日期:dd/MM/yyyy似乎不考虑我的数据注释.
查看呈现的HTML:
<input class="text-box single-line valid" data-val="true" data-val-required="La date de naissance est requise!" id="BirthDate1" name="BirthDate1" type="text" value="**9/9/1999 12:00:00 AM**">
Run Code Online (Sandbox Code Playgroud) 我有一个带有 String 属性和以下数据注释的 ViewModel :
编辑以使用字符串
[DataType(DataType.Date, ErrorMessage="Not Working !!!")]
public String StringBirthDate1 { get; set; }
Run Code Online (Sandbox Code Playgroud)
这就是我的看法
@Html.EditorFor(model => model.StringBirthDate1 )
@Html.ValidationMessageFor(model => model.StringBirthDate1)
Run Code Online (Sandbox Code Playgroud)
如果我运行我的应用程序并输入一个无效的日期,如“---”或 29.02.1900,我不会收到任何验证错误!
我有一张这样的桌子
CREATE TABLE [dbo].[tblUserLink](
[IDUserLink] [int] IDENTITY(1,1) NOT NULL,
[IDUser] [int] NOT NULL,
[IDRegie] [varchar](50) NOT NULL,
[DefaultAgency] [bit] NULL
)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个查询/脚本来更新字段DefaultAgency.我想将它设置为1,以获得具有相同IDUser的每组记录的第一条记录.
例如:
IDUserLink IDUser IDRegie DefaultAgency (Goal)
1 1 1 null DefaultAgency to be set to 1
2 1 2 null
3 1 3 null
4 2 2 null DefaultAgency to be set to 1
5 2 1 null
6 3 1 null DefaultAgency to be set to 1
...etc
Run Code Online (Sandbox Code Playgroud)
我可以使用简单的SQL查询来实现这一点,还是应该编写脚本?
我想在满足条件时显示建立在 when 语句上的多个字符串的串联。如下 :
select
case
when T1.Field is not null then 'T1,'
when T2.Field is not null then /*last results*/ + 'T2,'
when T3.Field is not null then /*last results*/ + 'T3,'
end
from T1
left outer join T2 on ...
left outer join T3 on ...
Run Code Online (Sandbox Code Playgroud) 我基于这个问题,用asp.net mvc3和jquery validate创建自定义验证属性:
我已经更新它以使用一组字符串属性而不是bool.哪个工作正常.但是当我使用自定义ErrorMessage时,我的问题就出现了,不显示自定义消息.我无法弄清楚原因.
[RequiredOneFromGroup("PhoneGroup",
ErrorMessageResourceName = "PhoneGroup",
ErrorMessageResourceType = typeof(WizardStrings))]
public String Mobile { get; set; }
[RequiredOneFromGroup("PhoneGroup",
ErrorMessageResourceName = "PhoneGroup",
ErrorMessageResourceType = typeof(WizardStrings))]
public String Phone { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是自定义验证属性:
[AttributeUsage(AttributeTargets.Property)]
public class RequiredOneFromGroup : ValidationAttribute, IClientValidatable
{
public RequiredOneFromGroup(string groupName)
{
ErrorMessage = string.Format("You must select at least one value from group \"{0}\"", groupName);
GroupName = groupName;
}
public string GroupName { get; private set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{ …Run Code Online (Sandbox Code Playgroud) 我一定错过了一些愚蠢但为什么要sumArray回来undefined?
<script>
function sumArray(arr, n, sum){
if(n == 0){
console.log( arr[0] + sum ); // log shows 15 as expected
return arr[0] + sum; // the function would return undefined
}else{
sum = sum + arr[n-1];
sumArray(arr, n-1, sum);
}
}
var arr1 = [0,1,2,3,4,5];
var result = sumArray(arr1, arr1.length, 0)
console.log(result); // returns Undefined !!!
</script>
Run Code Online (Sandbox Code Playgroud)