我刚从网络编程的考试中回到家,他们问我们的一个问题是"如果要播放视频,你会使用TCP还是UDP?为存储的视频和实时视频流提供解释".对于这个问题,他们只是简单地期望存储视频的TCP简短回答和实时视频的UDP,但我在回家的路上想到了这一点,并且使用UDP流媒体直播视频一定更好吗?我的意思是,如果你有足够的带宽,并说你正在播放足球比赛或音乐会,你真的需要使用UDP吗?
让我们说,当你正在流式音乐会或使用TCP的任何东西时,你开始丢失数据包(在你和发送者之间的某些网络中发生了一些不好的事情),并且整整一分钟你都没有得到任何数据包.视频流将暂停,一分钟后,数据包开始再次通过(IP为您找到了新的路由).然后会发生什么是TCP会在您丢失的那一刻重新传输并继续向您发送实时流.假设带宽高于流上的比特率,并且ping不是太高,所以在很短的时间内,丢失的那一分钟将作为流的缓冲区,这样,如果再次发生丢包,您将不会注意到.
现在,我可以想到一些设备,这不是一个好主意,例如视频会议,你需要总是在流的末尾,因为视频聊天期间的延迟是可怕的,但在足球比赛或音乐会期间,如果你在流后面一分钟,这有什么关系?此外,您可以保证获得所有数据,最好保存以供日后查看,而不会出现任何错误.
所以这让我想到了我的问题.关于使用TCP进行直播,我不知道有什么缺点吗?或者它应该真的是,如果你有它的带宽你应该去TCP,因为它对网络"更好"(流量控制)?
我使用带有可选参数的C#4.0遇到了另一个问题.
我如何调用一个函数(或者更确切地说是构造函数,我有ConstructorInfo对象),我知道它不需要任何参数?
这是我现在使用的代码:
type.GetParameterlessConstructor()
.Invoke(BindingFlags.OptionalParamBinding |
BindingFlags.InvokeMethod |
BindingFlags.CreateInstance,
null,
new object[0],
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
(我刚试过不同的BindingFlags).
GetParameterlessConstructor是我写的自定义扩展方法Type.
如何检查android中的SD卡上是否存在目录?
我正在尝试过滤使用此ArrayAdapter填充的ListView:
package me.alxandr.android.mymir.adapters;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import me.alxandr.android.mymir.R;
import me.alxandr.android.mymir.model.Manga;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.SectionIndexer;
import android.widget.TextView;
public class MangaListAdapter extends ArrayAdapter<Manga> implements SectionIndexer
{
public ArrayList<Manga> items;
public ArrayList<Manga> filtered;
private Context context;
private HashMap<String, Integer> alphaIndexer;
private String[] sections = new String[0];
private Filter filter;
private boolean enableSections;
public MangaListAdapter(Context context, int textViewResourceId, ArrayList<Manga> items, boolean enableSections)
{ …Run Code Online (Sandbox Code Playgroud) 我试图在我的ASP.net MVC4/WebApi项目中使用以下(和类似的)URL:
http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll
Run Code Online (Sandbox Code Playgroud)
负责此网址的路线如下所示:
config.Routes.MapHttpRoute(
name: "Nav",
routeTemplate: "api/nav/{project}/{assembly}/{namespace}/{type}/{member}",
defaults: new { controller = "Nav", assembly = RouteParameter.Optional, @namespace = RouteParameter.Optional, type = RouteParameter.Optional, member = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
如果我删除它,它的工作正常.在文件名中,或者如果我在URL后面添加斜杠,但这也意味着我不能使用Url.Route-methods等.我得到的错误是一般的404错误(下图).

我已经尝试添加<httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />到我的web.config,我也尝试添加
<compilation debug="true" targetFramework="4.5">
<buildProviders>
<remove extension=".dll"/>
<remove extension=".exe"/>
</buildProviders>
</compilation>
Run Code Online (Sandbox Code Playgroud)
而且似乎没有任何效果.所以我的问题基本上是,如何让这个URL工作,并正确映射?
截至最近的safari 5已经发布,结果导致我的网站出现了一些问题.我有一个运行经典ASP的动态网站(虽然这应该不重要),并且该网站对历史堆栈有一些创造性的使用.例如,您可以在列出产品的页面上,然后转到有关产品的详细信息并更改产品(admin-view).单击产品上的"保存"时,信息将通过AJAX发送到服务器,并history.back()发出a.这适用于所有浏览器(包括safari <= 4),但是,在新发布的Safari 5中它停止工作.似乎当您在safari 5中单击它实际上并不刷新页面时,它只会从缓存中加载它,这意味着不会显示在详细信息视图中所做的更改.我怎样才能在safari 5中进行这项工作呢?这是我必须关闭缓存的当前代码(包含在每个页面的顶部):
Dim pStr
pStr = "private, no-cache, no-store, must-revalidate"
Response.AddHeader "pragma","no-cache" '?
Response.AddHeader "cache-control", pStr '? Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "cache-control", "post-check=0, pre-check=0" '? Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT" '?
Response.AddHeader "Last-Modified", Now()
Run Code Online (Sandbox Code Playgroud) 我在C#中有一个json对象(表示为Newtonsoft.Json.Linq.JObject对象),我需要将其展平为字典.让我举例说明我的意思:
{
"name": "test",
"father": {
"name": "test2"
"age": 13,
"dog": {
"color": "brown"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这应该产生一个包含以下键值对的字典:
["name"] == "test",
["father.name"] == "test2",
["father.age"] == 13,
["father.dog.color"] == "brown"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有兴趣了解C#.NET中的并行编程(不是所有要知道的东西,而是基础知识,也许还有一些好的实践),因此我决定重新编程我的一个名为ImageSyncer的旧程序.ImageSyncer是一个非常简单的程序,它所做的只是扫描一个文件夹,找到以.jpg结尾的所有文件,然后根据它们的拍摄日期计算文件的新位置(解析xif数据,或者其他它被称为).在生成位置之后,程序检查该位置的任何现有文件,如果存在,则查看要复制的文件的最后写入时间和文件"以其方式".如果它们相等,则跳过该文件.如果不是,则创建并匹配两个文件的md5校验和.如果没有匹配要复制的是被复制到一个新位置的文件(例如,如果它是被复制到"C:\ test.jpg放在"它复制到"C:\测试(1). jpg"而不是".此操作的结果将填充到包含两个字符串的struct-type队列中,即原始文件和要将其复制到的位置.然后迭代该队列,直到它为空并且复制文件.
换句话说,有4个操作:
1. Scan directory for jpegs
2. Parse files for xif and generate copy-location
3. Check for file existence and if needed generate new path
4. Copy files
Run Code Online (Sandbox Code Playgroud)
因此,我想重写这个程序,使其成为并列,并能够同时执行多个操作,我想知道实现这一目标的最佳方法是什么.我想出了两个我能想到的不同模型,但它们中的任何一个都没有任何好处.第一个是并行化旧程序的4个步骤,以便当要执行第一步时,它在几个线程上完成,并且当完成整个步骤1时,开始步骤2.另外一个(我觉得更有趣,因为我不知道该怎样做到这一点的想法)是创建一种工人和消费者的模式,因此,当一个线程与步骤1中完成了一个又一个接管,并在执行第2步对象(或类似的东西).但正如所说,我不知道这些是否有任何好的解决方案.另外,我对并行编程知之甚少.我知道如何创建一个线程,以及如何让它执行一个以对象作为唯一参数的函数,我也曾经使用过BackgroundWorker类,但我对它们中的任何一个都不熟悉.
任何输入将不胜感激.
我有一个FileStream,它由几个放在一个文件中的文件组成,我有一个文件长度列表,换句话说,我可以轻松地计算所有文件的位置和长度.我想要创建的是一个Open方法,它接受fileindex并返回仅包含该文件的流.目前我已经使用内存流实现了这个,但这迫使我将整个(不是容器,但整个包含的)文件复制到内存中,我不想这样做.所以,我希望能够做的是创建一个实现流的类,并获取另一个流,一个偏移量和一个长度参数,然后是可读和可搜索的,只有当你做Seek(0)时你应该得到偏移量下层流的.所以就像一个适配器类,我想知道这是否可能,甚至是一个好主意,或者如果有人对如何解决这个问题有任何更好的想法.我意识到,如果我按照我刚刚描述的方式进行操作,我需要确保对底层流的访问是同步的,并且所有打开的部分流都包含一个私有变量,告诉它们当前在流中的位置,但是这个应该是可行的,对吗?以前有人做过这样的事吗?或者是否有一个我可以使用的简单.NET类?任何帮助,将不胜感激.
哦,抱歉英文不好,我忘了用英文安装我的浏览器,所以拼写检查器告诉我一切都错了.
我正在用C#编写一个库,我稍后将其用于一个应用程序,我希望该库尽可能高效(即不要过于复杂化,以使其更高效).但是,我有一个关于如何最有效地使用类/方法的反射的问题,并说明了我已经简化了我的课程的问题:
class MyClass
{
private static Dictionary<string, object> methods;
public void Method1()
{
// Do something.
}
public void Method2()
{
// Do something else.
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是来自类(一个尚未创建的私有方法),取一个包含方法名的字符串,然后触发方法,就这么简单.最简单的方法是查看名称,获取具有该名称的方法并执行它,但这迫使我多次使用反射.这种私有方法可能被称为数千或数万次,并且需要快速.所以我想出了两个可能的解决方案.你可能会看到我添加了一个包含string-> object的静态字典(用实际类型替换对象,只写了对象,因为它适用于我的两个例子).然后我将添加一个静态构造函数,该构造函数通过类并将所有methodinfos添加到methods-dictionary中.然后问题是,在创建类的新实例时,我应该创建方法的绑定委托并将它们放在非静态私有字典中,或者我应该只使用方法字典中的MethodInfo来触发方法?
平均用例将创建此类的10个实例,并且对该方法进行1000次以上的调用,该方法应根据其字符串参数触发Method1或Method2(并且不,因为可扩展性,switch-case不是一个选项如上所述,这是一个简化的版本).实现这一目标的最有效方法是什么?