是否可以运行我的一些PLINQ AsParallel() - 优先级低于其他查询的查询?(或者一些优先级高于其他人)这可能与PLinq有关,还是我必须避免使用PLINQ并自行完成所有工作?
编辑/ UPDATE:
是否可以打电话
Thread.Sleep(0)
Run Code Online (Sandbox Code Playgroud)
当我想存档较低的优先级时,在并行执行的方法内?或者这是一个非常糟糕的做法/黑客?
我需要使用文本列作为我的sqlite数据库的主键.我也有可能使用哈希函数从我的文本值中获取32位/ 64位int(我想用作主键).所以我可以使用这些int哈希值而不是我的文本值作为主键.但是我需要在表格中另外存储原始文本值.
但是我读到sqlite在内部使用了rowid,所以我不知道使用哈希函数是否会有所帮助.
sqlite会在他们的页面中存储rowid或文本值(当我使用它而不是哈希值时)吗?当它存储文本值时,我认为它可以吹掉页面并使用哈希值会更好.
但我这里缺乏知识.我希望你能帮助我.
我想压缩很多小字符串(大约75-100长度的c#字符串).在创建字典时,我已经知道所有短字符串(近一万亿).将来不会有额外的短字符串.我需要额外添加一个字符串而不解压缩其他字符串.
现在我正在寻找一个库或最好的方法来执行以下操作:
我找到了一个很好的相关问题,但这不是c#具体的.也许有一些东西可以用于c#我不知道,或者是一个花哨的图书馆,或者有人已经做过.这就是我提出这个问题的原因.
编辑:
有了字典,我正在谈论这样的事情:http://en.wikipedia.org/wiki/Dictionary_coder 但是一切都有助于缩短字符串.字符串是各种语言和URL的短文本消息(30%/ 70%).压缩字符串不需要是人类可读的.它将存储在二进制文件中.
我使用亚马逊产品广告API来获取产品类别.对于美国类别,它正在运作.
但是使用来自不同站点的浏览节点我收到以下错误:
"569604 is not a valid value for BrowseNodeId. Please change this value and retry your request."
Run Code Online (Sandbox Code Playgroud)
我从以下站点获得了浏览节点:http: //docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?BrowseNodeIDs.html
问题出在哪儿?
谢谢你的帮助!
我有大约10亿个数据集,它们有一个DatasetKey,每个数据集有1到5 000 000个子条目(一些对象),平均值大约是100,但有很多胖尾巴.
写入数据后,数据不会更新,只会读取数据.
我需要通过DatasetKey读取数据并执行以下操作之一:
获取子条目数
获取前1000个子条目(最大值小于1000)
获取前5000个子条目(最大值小于5000)
获取前100000个子条目(最大值如果小于100000)
获取所有子条目
每个子条目的大小约为20字节到2KB(平均450字节).
我想要使用的布局如下:
我创建了一个大小至少为5MB的文件.
每个文件至少包含一个DatasetKey,但如果文件仍然小于5MB,我添加新的DatasetKeys(带子条目),直到我超过5 MB.
首先,我存储一个标题,说明哪些文件偏移我会找到什么样的数据.
此外,我计划使用协议缓冲区存储序列化包.
前1000个条目的一个包,
一个用于接下来的4000个条目,
一个用于接下来的95000个条目,
一个用于下一个剩余的条目.
我将文件大小存储在RAM中(将所有标题存储在我使用的机器上所需的大量RAM中).当我需要访问特定的DatasetKey时,我在RAM中查找我需要的文件.然后我从RAM中获取文件大小.当文件大小约为5MB或更小时,我会将整个文件读入内存并进行处理.如果它超过5MB,我将只读取第一个xKB来获取标题.然后我从磁盘加载我需要的位置.
这听起来怎么样?这完全是胡说八道吗?还是一个好方法?
使用这个设计我有以下几点:
我想将我的数据存储在一个自己的二进制文件而不是数据库中,以便将来更容易备份和处理文件.
我会使用postgresql,但我想出存储二进制数据会使postgresqls-toast不止一次寻求访问数据.
为每个DatasetKey存储一个文件需要太多时间将所有值写入磁盘.
数据在RAM中计算(因为并非整个数据在RAM中同时拟合,它是以块为单位计算的).
5MB的文件大小只是一个粗略的估计.
你说什么?提前谢谢你的帮助!
编辑
更多背景资料:
DatasetKey的类型为ulong.
子条目(有不同的类型)大部分时间如下:
public struct ChildDataSet
{
public string Val1;
public string Val2;
public byte Val3;
public long Val4;
}
Run Code Online (Sandbox Code Playgroud)
我无法确切地知道访问了哪些数据.计划是用户可以访问特定DatasetKeys的前1000,5000,100000或所有数据.根据他们的设置.
我希望尽可能降低响应时间并尽可能少地使用磁盘空间.
@Regarding随机访问(Marc Gravells问题):
我不需要访问元素号.123456用于特定的DatasetKey.
当在一个文件中存储多个DatasetKey(带有子条目)时(我将其设计为不创建大量文件的方式),我需要随机访问该文件中特定DatasetKey的前1000个条目,或者第一个5000(所以我会阅读1000和4000包).
我只需要访问以下有关一个特定DatasetKey(uint)的内容:
1000个子条目(或所有子条目,如果小于1000)
5000个子条目(或所有子条目,如果小于5000)
100000个子条目(或所有子条目,如果小于100000)
所有子条目
我提到的所有其他事情只是一个设计尝试从我:-)
编辑,在一个类中流式传输一个列表?
public class ChildDataSet
{
[ProtoMember(1)]
public List<Class1> Val1;
[ProtoMember(2)]
public List<Class2> Val2;
[ProtoMember(3)]
public List<Class3> Val3; …Run Code Online (Sandbox Code Playgroud) FileStream.Read()定义为:
public override int Read(
byte[] array,
int offset,
int count
)
Run Code Online (Sandbox Code Playgroud)
如何从大于int.MaxValue的偏移量中读取一些字节?
假设我有一个非常大的文件,我想从位置3147483648开始读取100MB.
我怎样才能做到这一点?
我正在寻找返回类型为ulong的Math.Abs(ulong,ulong).但似乎微软只为long,int等实现了它.还有另一种快速的方法吗?
对不起,需要纠正:
Math.Abs(ulong - ulong)
Run Code Online (Sandbox Code Playgroud)
所以它可以变得消极,并且超出了长期的范围.
有时在任何Visual Studio选项卡的右侧会有一个小挂锁符号.它是什么?
我认为它类似于源代码控制,但我的解决方案没有在源代码控制中检查.
编辑:感谢您的答案到目前为止,但我可以编辑文件.当我处于调试模式时,它也有这个挂锁标志,但是当我将鼠标放在标签上时,我可以读取"只读".不处于调试模式(正常编辑模式,没有运行),还有挂锁符号.但是,当我将鼠标放在标签上时,没有只读文本.
是否还有挂锁标志的其他定义?或者我如何在编辑正常的源代码时看到挂锁符号(并且没有调试运行)?
我有一个特定的id("mysubid"),现在我想检查这个元素(这个id)是否在另一个id("mymainid")的子路径中.
有没有一种简单的方法可以做到这一点,或者我将逐个元素地向上查看元素是否在子路径中.
通过子路径,我说的是这样的事情:
A> B> C> D.
所以D在A,B和C的子路径中
我想使用system.data.sqlite读取表中的所有行.由于我有一个非常大的表(> 450GB,行超过60亿),我想确保sqlite将使用连续的磁盘访问.您可能知道随机访问硬盘很慢.由于内存不足,我无法一次加载所有数据.所以最好的方法是如果sqlite读取几百MB(连续),那么我使用这些数据,sqlite读取下一个.
我怎么能确定sqlite会以这种方式进行磁盘访问而不是从硬盘上的一个位置跳转到另一个位置?
我知道的事情(我认为这些建议会出现):
我找到了这篇文章,但它没有正确解决我的问题:
哪种方法可以检索SQLite中的所有项目?
c# ×6
.net ×3
sqlite ×2
binaryfiles ×1
compression ×1
file ×1
filestream ×1
javascript ×1
jquery ×1
math ×1
plinq ×1
protobuf-net ×1
stream ×1