在回答这个问题时,它让我思考......
我经常使用这种模式:
collectionofsomestuff //here it's LinqToEntities
.Select(something=>new{something.Name,something.SomeGuid})
.ToArray() //From here on it's LinqToObjects
.Select(s=>new SelectListItem()
{
Text = s.Name,
Value = s.SomeGuid.ToString(),
Selected = false
})
Run Code Online (Sandbox Code Playgroud)
也许我会将它分成几行,但实际上,在这ToArray一点上,我实际上是在枚举我的查询并存储结果序列,这样我就可以用完整的CLR的所有优点来进一步处理它.
因为我对中间列表的任何操作都不感兴趣,所以我会使用ToArray,ToList因为开销较少.
我一直这样做,但我想知道这种问题是否有更好的模式?
我有一个关于对象类型转换的问题.假设我们有:
A a = new A();
Object o = a;
Run Code Online (Sandbox Code Playgroud)
据我所知,背后发生的是编译器将复制a的地址并存储在o变量的内存区域中.然后,我们可以说a和o引用同一个对象.
如果我们这样做:
String s = "abc";
int a = (int)s;
Run Code Online (Sandbox Code Playgroud)
然后我明白编译器不能将字符串值复制到int内存区域.
但如果我们有:
A a = new A();
B b = (B)a;
Run Code Online (Sandbox Code Playgroud)
这在编译时可能没问题.但是,可能会发生运行时错误,例如"无法投射......".
所以,我不明白在内存中实际发生的事情会导致无法执行上面的转换.它只是将a的地址复制到b的内存区域吗?如果是这样,为什么不可能呢?或者它会复制A的所有成员来替换B的所有成员?
谢谢
我的代码包含这样的内容:
{
var comeback = Cursor.Position;
code goes here
code goes here
code goes here
code goes here
code goes here
code goes here
Cursor.Position = restart;
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望这个循环不断循环,直到我调用一个按键停止.
我不能做什么我写这个循环的代码,或者我应该采取不同的方式来解决这个问题.
提前致谢
我希望这个问题有很多可能的解决方案,我可以自己提出一些解决方案,其中一些明显优于其他解决方案,但我确定没有一个解决方案是最优的,所以我很想听听那些真正的多线程专家.
我有大约100件可以同时执行的工作,因为它们之间没有依赖关系.如果我按顺序执行这些操作,我的总执行时间大约是1:30.如果我在线程池中对每个工作进行排队,则需要大约2米,这告诉我,我正在尝试一次做太多,并且所有这些线程之间的上下文切换否定了拥有这些线程的优势.
所以基于这个假设(如果这是错误的话,请随时把我击倒)如果我只排队到系统中的核心数(这台机器上有8个),那么任何时候我都会减少上下文切换从而提高整体效率(其他流程线程当然不能承受),有人能建议这样做的最佳模式/技术吗?
顺便说一下,我使用的是smartthreadpool.codeplex.com,但我没有.
在与Uri班级一起回答另一个问题时,我发现了一些对我来说很奇怪的东西:
考虑这两个Uris:
var u1 = new Uri("http://a.b:33/abc%2fdef/c?d=f");
var u2 = new Uri("foobar://a.b:33/abc%2fdef/c?d=f");
Run Code Online (Sandbox Code Playgroud)
他们的区别仅在于他们的计划.提供的标识符的所有其他元素都是相同的.
那么,为什么,当我转储Segments这些Uri实例的属性时,我是否看到以下输出u1:
/ abc/ def/ c
......但不同的输出u2?
/ abc%2fdef/ c
为什么不同方案的解析行为不同?
我们在sql server中执行一些数据的校验和,如下所示:
declare @cs int;
select
@cs = CHECKSUM_AGG(CHECKSUM(someid, position))
from
SomeTable
where
userid = @userId
group by
userid;
Run Code Online (Sandbox Code Playgroud)
然后,这些数据与客户共享.我们希望能够在客户端重复校验和...但是似乎没有关于如何计算上述函数中的校验和的任何信息.任何人都可以开导我吗?
我正在尝试从C#中获取来自Gmail的邮件,
但邮件正文如下所示"\r\n\r\nBODY\r\n\r\n"
我如何才能"BODY"从字符串中获取信息?
我试图循环它,但我发现循环时"\r"变成了一个" "
请考虑以下简化示例(准备在LinqPad中滚动,需要提升帐户):
void Main()
{
Go();
Thread.Sleep(100000);
}
async void Go()
{
TcpListener listener = new TcpListener(IPAddress.Any, 6666);
try
{
cts.Token.Register(() => Console.WriteLine("Token was canceled"));
listener.Start();
using(TcpClient client = await listener.AcceptTcpClientAsync()
.ConfigureAwait(false))
using(var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
{
var stream=client.GetStream();
var buffer=new byte[64];
try
{
var amtRead = await stream.ReadAsync(buffer,
0,
buffer.Length,
cts.Token);
Console.WriteLine("finished");
}
catch(TaskCanceledException)
{
Console.WriteLine("boom");
}
}
}
finally
{
listener.Stop();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我连接一个telnet客户端localhost:6666并且在5秒钟内无所事事,为什么我会看到"令牌被取消"但从未看到"繁荣"(或"完成")?
这个NetworkStream会不会取消取消吗?
我可以结合使用Task.Delay()和解决这个问题Task.WhenAny,但是我希望能够按预期工作.
相反,以下取消示例:
async void Go(CancellationToken ct)
{ …Run Code Online (Sandbox Code Playgroud) 我一直用async关键字编写我的Web Api控制器方法,并且一直在使用async.我最近尝试进行方法同步以查看它将如何影响性能,并且发现它对任何其他http请求没有阻塞影响感到震惊.
举例 -
[Route("Foo")]
class FooController {
[HttpGet("Hello")]
public string GetHello()
{
Thread.Sleep(100000); // 100 seconds
return "Hello";
}
[HttpGet("Goodbye")]
public string GetGoodbye()
{
return "Goodbye";
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以运行GET=> /Foo/Hello后跟任意数量的GET=>,/Foo/Goodbye并且我对Goodbye端点的请求没有阻塞.
我原本以为我需要让Hello方法异步,以便对Goodbye端点的请求会毫不拖延地返回.但是使这个方法同步/异步没有效果!
非常困惑.Web Api应用程序不需要异步吗?为什么推荐?
c# ×8
.net ×1
.net-3.5 ×1
.net-4.0 ×1
asp.net-core ×1
async-await ×1
asynchronous ×1
cancellation ×1
casting ×1
checksum ×1
comments ×1
date ×1
linq ×1
object ×1
reference ×1
sql-server ×1
stream ×1
string ×1
tcplistener ×1
types ×1
uri ×1
url-encoding ×1
winforms ×1